টের্নারি অপারেটরের সাথে অনুমোদিত ইন্ট হিসাবে নাল ফেরানো তবে বিবৃতি না থাকলে


186

আসুন নীচের স্নিপেটে সহজ জাভা কোডটি দেখুন:

public class Main {

    private int temp() {
        return true ? null : 0;
        // No compiler error - the compiler allows a return value of null
        // in a method signature that returns an int.
    }

    private int same() {
        if (true) {
            return null;
            // The same is not possible with if,
            // and causes a compile-time error - incompatible types.
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.temp());
        System.out.println(m.same());
    }
}

জাভা কোডের এই সহজতম temp()পদ্ধতিতে, ফাংশনটির রিটার্ন টাইপ হওয়া সত্ত্বেও পদ্ধতিটি কোনও সংকলক ত্রুটি জারি করে না intএবং আমরা মানটি null(বিবৃতি দিয়ে return true ? null : 0;) ফেরত দেওয়ার চেষ্টা করছি । যখন সংকলন করা হয়, এটি স্পষ্টতই রান সময় ব্যতিক্রম ঘটায় NullPointerException

তবে, এটি প্রতীয়মান হয় যে একই জিনিসটি যদি আমরা একটি ifবিবৃতি ( same()পদ্ধতি হিসাবে ) সহ টেরিনারি অপারেটরকে উপস্থাপন করি যা একটি সংকলন-সময় ত্রুটি জারি করে ! কেন?


6
এছাড়াও, int foo = (true ? null : 0)এবং new Integer(null)উভয়ই জরিমানা সংকলন করে, দ্বিতীয়টি অটোবক্সিংয়ের স্পষ্ট রূপ।
ইজকাটা

2
সমস্যা @Izkata এখানে আমার বোঝার জন্য কেন কম্পাইলার autobox চেষ্টা করছেন nullকরার Integer... যে শুধু আমার কাছে "মনন" বা "জিনিস কাজ উপার্জন" দেখাবে ...
মারসেলাস ওয়ালেস

1
... হুম, আমি ভেবেছিলাম সেখানে আমার একটি উত্তর আছে, কারণ পূর্ণসংখ্যা নির্মাতা (যা ডকস বলেছি যা অটোবক্সিংয়ের জন্য ব্যবহৃত হয়) তাকে স্ট্রিংকে আর্গুমেন্ট হিসাবে গ্রহণ করার অনুমতি দেওয়া হয় (যা নাল হতে পারে)। যাইহোক, তারা আরও বলেছে যে নির্মাতা প্যার্সিইন্ট () পদ্ধতিটি একইভাবে কাজ করে যা শূন্য পাস করার পরে একটি নম্বর ফরম্যাট এক্সেক্সশন নিক্ষেপ করে ...
ইজকাটা

3
@ ইজকাটা - পূর্ণসংখ্যার জন্য স্ট্রিং আর্গুমেন্ট ক্যাটার কোনও অটোবক্সিং ওপ্রেশন নয়। একটি স্ট্রিং একটি পূর্ণসংখ্যার সাথে অটোবক্স করা যায় না। (ফাংশনটি Integer foo() { return "1"; }সংকলন করবে না))
টেড হপ

5
দুর্দান্ত, টেরিনারি অপারেটর সম্পর্কে নতুন কিছু শিখলেন!
oksayt

উত্তর:


118

সংকলকটি শুরুর nullদিকে একটি শূন্য রেফারেন্স হিসাবে ব্যাখ্যা Integerকরে, শর্তসাপেক্ষ অপারেটরের জন্য অটোবক্সিং / আনবক্সিং বিধি প্রয়োগ করে ( জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন, 15.25 তে বর্ণিত ) এবং সুখে এগিয়ে চলে। এটি NullPointerExceptionরান করার সময় তৈরি করবে , যা আপনি চেষ্টা করে নিশ্চিত করতে পারবেন।


আপনার পোস্ট করা জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনের লিঙ্কটি দিয়েছেন, আপনি কি মনে করেন যে উপরের প্রশ্নের ক্ষেত্রে কোন পয়েন্টটি কার্যকর করা হয়েছে? শেষটি (যেহেতু আমি এখনও বোঝার চেষ্টা করছি capture conversionএবং lub(T1,T2)) ?? এছাড়াও, বক্সিংটিকে নাল মূল্যতে প্রয়োগ করা কি সত্যিই সম্ভব? এটি কি "অনুমান" করার মতো হবে না ??
মার্সেলাস ওয়ালেস

Ge @ জ্যাভর্গ একটি নাল পয়েন্টার হ'ল প্রতিটি সম্ভাব্য অবজেক্টের একটি বৈধ পয়েন্টার তাই সেখানে খারাপ কিছুই ঘটতে পারে না। সংকলকটি কেবল ধরে নিয়েছে যে নালটি একটি পূর্ণসংখ্যা যা এটি এর পরে এটি অটোবক্স করতে পারে।
ভু

1
@ গাভর্র্গ - এখনকের মন্তব্য এবং তার পোস্টে আমার প্রতিক্রিয়া দেখুন। আমি মনে করি তিনি সঠিক ধারাটি বেছে নিয়েছেন। lub(T1,T2)টি 1 এবং টি 2 টাইপ শ্রেণিবিন্যাসের মধ্যে সর্বাধিক সুনির্দিষ্ট রেফারেন্স টাইপ। (তারা দু'জনেই কমপক্ষে অবজেক্ট ভাগ করে নেয়, তাই সর্বদা একটি সুনির্দিষ্ট নির্দিষ্ট রেফারেন্স টাইপ থাকে))
টেড হপ

8
@ জিভর্গ - nullএটি একটি পূর্ণসংখ্যার মধ্যে বাক্সযুক্ত নয় , এটি একটি পূর্ণসংখ্যার রেফারেন্স হিসাবে ব্যাখ্যা করা হয় (নাল রেফারেন্স, তবে এটি কোনও সমস্যা নয়)। নাল থেকে কোনও পূর্ণসংখ্যার অবজেক্ট তৈরি করা হয়নি, সুতরাং নাম্বার ফর্ম্যাট এক্সেকশন হওয়ার কোনও কারণ নেই।
টেড হপ

1
@ জিভর্গ - আপনি যদি বক্সিং রূপান্তর সম্পর্কিত নিয়মগুলি লক্ষ্য করেন এবং সেগুলিতে প্রয়োগ করেন null(যা কোনও প্রাথমিক সংখ্যা নয়) তবে প্রযোজ্য ধারাটি "যদি পি অন্য কোনও ধরণের মান হয় তবে বক্সিং রূপান্তরটি একটি পরিচয় রূপান্তর সমতুল্য "। সুতরাং রূপান্তর বক্সিং nullকরার Integerউৎপাদনের nullকোনো invoking ছাড়া Integerকন্সট্রাকটর।
টেড হপ

40

আমি মনে করি, জাভা কম্পাইলার ব্যাখ্যা করে true ? null : 0একটি যেমন Integerঅভিব্যক্তি, যা পরোক্ষভাবে কাজে রূপান্তরিত হতে পারে int, সম্ভবত দান NullPointerException

দ্বিতীয় কেসের জন্য, এক্সপ্রেশনটি nullবিশেষ নাল টাইপের দেখতে হয় , তাই কোডটি return nullঅমিল করে।


2
আমি ধরে নিই যে এটি অটো-বক্সিংয়ের সাথে সম্পর্কিত? সম্ভবত প্রথম রিটার্ন জাভা 5 এর আগে সংকলন করবে না , তাই না?
মাইকেল ম্যাকগোয়ান

@ মাইকেল আপনি যদি Eclipse এর সম্মতি স্তরটিকে প্রাক -5-এ সেট করে থাকেন তবে ক্ষেত্রে এটি প্রদর্শিত হবে।
জোনাথন ফাউস্ট

@ মিশেল: এটি অবশ্যই অটো-বক্সিংয়ের মতো দেখাচ্ছে (আমি জাভাতে বেশ নতুন, এবং আরও সংজ্ঞায়িত বিবৃতি দিতে পারি না - দুঃখিত)
ভ্লাদ

1
@ ভ্লাদ কিভাবে সংকলক true ? null : 0হিসাবে ব্যাখ্যা করা শেষ হবে Integer? 0প্রথমে অটোবক্সিং করে ??
মার্সেলাস ওয়ালেস

1
@ জিভর্র্গ: এখানে দেখুন : অন্যথায়, দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলি যথাক্রমে এস 1 এবং এস 2 ধরণের হয়। এস 1-তে বক্সিং রূপান্তর প্রয়োগের ফলে টি 1-কে সেই ধরণের ফলাফল দেওয়া হোক এবং এস 2-তে বক্সিং রূপান্তর প্রয়োগের ফলে টি 2 কে এমন ধরণের রূপ দিন। এবং নিম্নলিখিত পাঠ্য।
ভ্লাদ

32

প্রকৃতপক্ষে, এর সবগুলি জাভা ভাষার নির্দিষ্টকরণে ব্যাখ্যা করা হয়েছে ।

শর্তসাপেক্ষ প্রকাশের ধরণটি নিম্নলিখিত হিসাবে নির্ধারিত হয়:

  • দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলির যদি একই ধরণের থাকে (যা নাল টাইপ হতে পারে), তবে এটি শর্তসাপেক্ষ প্রকাশের ধরণ।

সুতরাং আপনার মধ্যে "নাল" (true ? null : 0)একটি প্রকার টাইপ পায় এবং তারপরে পূর্ণসংখ্যার সাথে অটোবক্স হয়।

এটি যাচাই করতে এর মতো কিছু চেষ্টা করুন (true ? null : null)এবং আপনি সংকলক ত্রুটি পাবেন।


3
কিন্তু নিয়ম যে ধারা প্রযোজ্য নয়: দ্বিতীয় ও তৃতীয় operands না না একই ধরনের আছে।
টেড হপ

1
তারপরে উত্তরটি নীচের বিবৃতিতে বলে মনে হচ্ছে:> অন্যথায়, দ্বিতীয় এবং তৃতীয় অপারেশনগুলি যথাক্রমে এস 1 এবং এস 2 ধরণের। এস 1-তে বক্সিং রূপান্তর প্রয়োগের ফলে টি 1-কে সেই ধরণের ফলাফল দেওয়া হোক এবং এস 2-তে বক্সিং রূপান্তর প্রয়োগের ফলে টি 2 কে এমন ধরণের রূপ দিন। শর্তসাপেক্ষ প্রকাশের ধরণটি ক্যাপচার রূপান্তর (§5.1.10) টি লাব (টি 1, টি 2) (§15.12.2.7) এ প্রয়োগের ফলাফল।
nowaq

আমি মনে করি এটি প্রযোজ্য ধারা। তারপরে এটি intফাংশন থেকে কোনও মান ফেরত দেওয়ার জন্য অটো-আনবক্সিং প্রয়োগ করার চেষ্টা করে, যা কোনও এনপিইর কারণ হয় causes
টেড হপ

@ নোয়াখ আমিও এটি ভেবেছিলাম তবে, আপনি যদি স্পষ্টভাবে "এস 1 তে বক্সিং রূপান্তর প্রয়োগের ফলাফল হিসাবে টি 1 হ'ল" এর সাথে বাক্সটি nullদেওয়ার চেষ্টা করেন তবে আপনি এটি পেয়ে যাবেন এবং এটি ঘটবে না ...Integernew Integer(null);NumberFormatException
মার্শেলাস ওয়ালেস

@ গেভার্গ আমি ভাবছিলাম যেহেতু বক্সিং করার সময় একটি ব্যতিক্রম ঘটে তাই আমরা এখানে কোনও ফল পাই না। সংকলকটি কেবল কোড উত্পন্ন করতে বাধ্য যে এটি সংজ্ঞাটি অনুসরণ করে যা - এটি সম্পন্ন করার আগে আমরা কেবল ব্যতিক্রমটি পাই।
ভু

25

ifউক্তির ক্ষেত্রে , nullরেফারেন্সটিকে Integerরেফারেন্স হিসাবে বিবেচনা করা হবে না কারণ এটি কোনও অভিব্যক্তিতে অংশ নিচ্ছে না যা এটির মতো ব্যাখ্যা করতে বাধ্য করে। সুতরাং ত্রুটিটি সহজেই সংকলন-সময়ে ধরা যায় কারণ এটি আরও স্পষ্টভাবে টাইপ ত্রুটি।

শর্তসাপেক্ষ অপারেটর হিসাবে, জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন - 15.25 "শর্তসাপেক্ষ অপারেটর ? :" কীভাবে রূপান্তরকরণ প্রকার প্রয়োগ করা হয় তার বিধিগুলিতে এটি সুন্দরভাবে উত্তর দেয়:

  • দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলির যদি একই ধরণের থাকে (যা নাল টাইপ হতে পারে), তবে এটি শর্তসাপেক্ষ প্রকাশের ধরণ।

    না হওয়ায় প্রয়োগ nullহয় না int

  • যদি দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলির মধ্যে একটি টাইপ বুলিয়ান হয় এবং অন্যটির ধরণের বুলিয়ান টাইপ হয় তবে শর্তসাপেক্ষ প্রকাশের ধরণটি বুলিয়ান।

    প্রযোজ্য নয় কারণ তন্ন তন্ন nullনা intহয় booleanবা Boolean

  • দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলির মধ্যে একটি যদি নাল টাইপের হয় এবং অন্যটির প্রকারটি একটি রেফারেন্স টাইপ হয়, তবে শর্তাধীন এক্সপ্রেশনটির ধরণটি সেই রেফারেন্স টাইপ। নাল প্রকারের

    কারণে প্রয়োগ হয় না nullতবে intএটি কোনও রেফারেন্স টাইপ নয়।

  • অন্যথায়, যদি দ্বিতীয় এবং তৃতীয় অপারেন্ডসের সংখ্যার সাথে রূপান্তরযোগ্য (§5.1.8) টাইপ থাকে তবে বেশ কয়েকটি কেস রয়েছে: […]

    প্রযোজ্য: nullএকটি সংখ্যার ধরণের ক্ষেত্রে রূপান্তরযোগ্য হিসাবে বিবেচিত হয় এবং এটি §5.1 এ সংজ্ঞায়িত করা হয়। 8 "আনবক্সিং রূপান্তর" নিক্ষেপ করতে NullPointerException

যদি 0অটোবক্স হয় Integerতবে কম্পাইলার জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে বর্ণিত "টের্নারি অপারেটর বিধি" এর শেষ কেসটি কার্যকর করছে uting যদি এটি সত্য হয় তবে আমার পক্ষে বিশ্বাস করা কঠিন যে এটি একই নিয়মের যে নাল এবং একটি রেফারেন্স টাইপ রয়েছে তার তৃতীয় অপারেটরের রিটার্ন মানকে রেফারেন্স টাইপ (পূর্ণসংখ্যার) হিসাবে ফিরিয়ে দেবে .. ।
মার্সেলাস ওয়ালেস

@ জিভর্গ - কেন বিশ্বাস করা কঠিন যে টের্নারি অপারেটর একটি ফিরিয়ে দিচ্ছে Integer? ঠিক যা ঘটছে; এনপিইটি intফাংশন থেকে কোনও ফেরতের জন্য এক্সপ্রেশন মানটি আনবক্স করার চেষ্টা করে তৈরি করা হচ্ছে । ফিরিয়ে ফাংশনটি পরিবর্তন করুন Integerএবং এটি nullকোনও সমস্যা ছাড়াই ফিরে আসবে ।
টেড হপ

2
@ টেডহপ: জ্যাভর্গ আমার উত্তরটির পূর্ববর্তী সংশোধনকে সাড়া দিচ্ছিল, যা ভুল ছিল। আপনার তাত্পর্যটি উপেক্ষা করা উচিত।
জন পুর্ডি

@ জোনপুর্ডি "একটি প্রকারটিকে সংখ্যার প্রকারে রূপান্তরিত বলে মনে হয় এটি যদি একটি সংখ্যার প্রকার হয় তবে এটি একটি উল্লেখযোগ্য ধরণ যা আনবক্সিং রূপান্তর দ্বারা সংখ্যার ধরণের রূপান্তরিত হতে পারে" এবং আমি মনে করি না যে nullএই বিভাগে আসে falls । এছাড়াও, আমরা তারপরে "অন্যথায়, বাইনারি সংখ্যার প্রচার (§5.6.2) প্রয়োগ করা হবে ... নোট করুন যে বাইনারি সংখ্যার প্রচারগুলি রিটার্নের ধরণ নির্ধারণের জন্য আনবক্সিং রূপান্তর (§5.1.8) সম্পাদন করে ..." তবে আনবক্সিং রূপান্তরটি একটি এনপিই তৈরি করে এবং এটি কেবল রানটাইমেই ঘটে এবং টার্নারি অপারেটরের ধরণ নির্ধারণ করার সময় নয় not আমি এখনও বিভ্রান্ত ..
মার্সেলাস ওয়ালেস

@ জিভর্গ: রানটাইমের সময় আনবক্সিং হয়। nullযেন এটা টাইপ ছিল চিকিত্সা করা হয় int, কিন্তু আসলে সমতূল্য throw new NullPointerException(), সমস্ত যে।
জন পুরি

11

প্রথম জিনিসটি মনে রাখবেন যে জাভা টার্নারি অপারেটরগুলির একটি "টাইপ" রয়েছে এবং এটিই দ্বিতীয় এবং তৃতীয় প্যারামিটারের প্রকৃত / আসল ধরণের কী তা নির্ধারণ করে বিবেচনা করবে এবং সংকলক বিবেচনা করবে। বিভিন্ন উপাদানগুলির উপর নির্ভর করে জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন 15.26 তে বর্ণিত হিসাবে টার্নারি অপারেটর প্রকারটি বিভিন্ন উপায়ে নির্ধারিত হয়

উপরের প্রশ্নে আমাদের শেষ মামলাটি বিবেচনা করা উচিত:

অন্যথায়, দ্বিতীয় এবং তৃতীয় অপারেশনগুলি যথাক্রমে এস 1 এবং এস 2 ধরণের । যাক T1 এর ধরণ যে বক্সিং রূপান্তর আবেদন থেকে ফলাফল হতে S1 , এবং দিন T2 ধরনের হতে যে বক্সিং রূপান্তর আবেদন থেকে ফলাফল , S2 । শর্তসাপেক্ষ প্রকাশের প্রকারটি হ'ল ক্যাপচার রূপান্তর (§5.1.10) প্রয়োগ করে (টি 1, টি 2) (.115.12.2.7)।

একবারে একবারে ক্যাপচার রূপান্তর (§5.1.10) প্রয়োগ করে এবং বেশিরভাগটি লাবের (টি 1, টি 2) প্রয়োগ করার পরে এটি সবচেয়ে জটিল কেস ।

সরল ইংরেজিতে এবং একটি চূড়ান্ত সরলকরণের পরে আমরা প্রক্রিয়াটিকে দ্বিতীয় এবং তৃতীয় পরামিতিগুলির "সর্বনিম্ন প্রচলিত সুপারক্লাস" (হ্যাঁ, এলসিএম ভাবুন) গণনা হিসাবে বর্ণনা করতে পারি। এটি আমাদের টার্নারি অপারেটরকে "টাইপ" দেবে। আবার, আমি যা বলেছি তা হ'ল চূড়ান্ত সরলীকরণ (একাধিক সাধারণ ইন্টারফেস প্রয়োগকারী ক্লাসগুলি বিবেচনা করুন)।

উদাহরণস্বরূপ, যদি আপনি নিম্নলিখিতটি চেষ্টা করেন:

long millis = System.currentTimeMillis();
return(true ? new java.sql.Timestamp(millis) : new java.sql.Time(millis));

আপনি লক্ষ্য করবেন যে শর্তসাপেক্ষ প্রকাশের ফলে প্রাপ্ত ধরনটি java.util.Dateএটি Timestamp/ Timeজুটির জন্য "সর্বনিম্ন প্রচলিত সুপারক্র্লাস" since

যেহেতু nullযে কোনও কিছুর সাথে অটোবক্স করা যেতে পারে, "সর্বনিম্ন প্রচলিত সুপারক্লাস" Integerক্লাস এবং এটি উপরের শর্তসাপেক্ষ এক্সপ্রেশন (টার্নারি অপারেটর) এর রিটার্ন টাইপ হবে। তারপরে রিটার্ন মানটি প্রকারের নাল পয়েন্টার Integerহবে এবং এটিই টের্নারি অপারেটর ফিরিয়ে দেবে।

রানটাইমের সময়, যখন জাভা ভার্চুয়াল মেশিনটি আনবক্স করে Integer একটি NullPointerExceptionনিক্ষেপ করা হয়। এটি ঘটায় কারণ জেভিএম ফাংশনটি চালু করার চেষ্টা করে null.intValue(), যেখানে nullঅটোবক্সিংয়ের ফলাফল।

আমার মতে (এবং যেহেতু আমার মতামত জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে নেই তাই অনেক লোক যেভাবেই এটিকে ভুল দেখতে পাবেন) সংকলকটি আপনার প্রশ্নের অভিব্যক্তিটি মূল্যায়নের ক্ষেত্রে একটি খারাপ কাজ করে। আপনি লিখেছেন যে দেওয়াtrue ? param1 : param2 সংকলকটি তা অবিলম্বে নির্ধারণ করা উচিত যে প্রথম প্যারামিটার - null- ফিরিয়ে দেওয়া হবে এবং এটি একটি সংকলক ত্রুটি তৈরি করবে। এটি আপনি লেখার সময় কিছুটা অনুরূপ while(true){} etc...এবং সংকলকটি লুপের নীচে কোড সম্পর্কে অভিযোগ করে এবং এটিতে ফ্ল্যাগ করে Unreachable Statements

আপনার দ্বিতীয় কেসটি বেশ সোজাসাপ্টা এবং এই উত্তরটি ইতিমধ্যে খুব দীর্ঘ ...;)

সংশোধন:

অন্য বিশ্লেষণের পরে আমি বিশ্বাস করি যে আমার কাছে ভুল ছিল যে কোনও nullকিছুর সাথে একটি মান বাক্সড / অটোবক্স করা যায়। শ্রেণীর পূর্ণসংখ্যা সম্পর্কে কথা বললে, স্পষ্ট বক্সিং বক্সিংটি new Integer(...)কনস্ট্রাক্টরকে অনুরোধ করতে পারে বা সম্ভবত Integer.valueOf(int i);(আমি এই সংস্করণটি কোথাও খুঁজে পেয়েছি) consists প্রাক্তনটি একটি নিক্ষেপ করবে NumberFormatException(এবং এটি ঘটে না) যখন দ্বিতীয়টি বোঝাতে intপারে না কারণ এটি হতে পারে না null...


1
nullওপি মূল কোডে boxed করা হয় না। এটি যেভাবে কাজ করে তা হ'ল: সংকলকটি ধরে নিয়েছে যে এটি nullএকটি পূর্ণসংখ্যার একটি রেফারেন্স। ত্রৈমাসিক অভিব্যক্তি প্রকারের জন্য নিয়ম ব্যবহার করে, এটি সম্পূর্ণ এক্সপ্রেশনটি একটি পূর্ণসংখ্যা এক্সপ্রেশনটি স্থির করে। এরপরে এটি অটোবক্সে কোড উত্পন্ন করে 1(যদি শর্তটি মূল্যায়ন করে তবে false)। এক্সিকিউশন চলাকালীন শর্তটি মূল্যায়ন করে trueতাই অভিব্যক্তিটি যা মূল্যায়ন করে nullintফাংশন থেকে কোনও ফেরত দেওয়ার চেষ্টা করার সময় , এটি nullআনবক্সড হয়। তারপরে একটি এনপিই ছুড়ে দেয়। (
সংকলকটি এগুলির

4

প্রকৃতপক্ষে, প্রথম ক্ষেত্রে অভিব্যক্তিটি মূল্যায়ন করা যায়, যেহেতু সংকলক জানে, এটি অবশ্যই একটি হিসাবে মূল্যায়ন করা উচিত Integer, তবে দ্বিতীয় ক্ষেত্রে রিটার্ন মান ( null) প্রকারটি নির্ধারণ করা যায় না, সুতরাং এটি সংকলন করা যায় না। আপনি যদি এটিতে কাস্ট করেন Integerতবে কোডটি সংকলন করবে।


2
private int temp() {

    if (true) {
        Integer x = null;
        return x;// since that is fine because of unboxing then the returned value could be null
        //in other words I can say x could be null or new Integer(intValue) or a intValue
    }

    return (true ? null : 0);  //this will be prefectly legal null would be refrence to Integer. The concept is one the returned
    //value can be Integer 
    // then null is accepted to be a variable (-refrence variable-) of Integer
}

0

এটি সম্পর্কে:

public class ConditionalExpressionType {

    public static void main(String[] args) {

        String s = "";
        s += (true ? 1 : "") instanceof Integer;
        System.out.println(s);

        String t = "";
        t += (!true ? 1 : "") instanceof String;
        System.out.println(t);

    }

}

আউটপুট সত্য, সত্য।

অলবক্সের হিসাবে শর্তসাপেক্ষ অভিব্যক্তিতে গ্রহবর্ণের রঙ 1 কোড করে।

আমার অনুমান যে সংকলকটি অবজেক্ট হিসাবে প্রকাশের ফেরতের ধরণটি দেখছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.