কিছু দিন আগে, আমি এক মনোমুগ্ধকর দৃশ্যে ছুটে এসেছি যে জাভা কীভাবে বা কেন নিম্নলিখিতটি ঘটতে দেয় সে সম্পর্কে কোনও নথিপত্র পাইনি find (এই স্নিপেটটি বাগের কেবল একটি সরলীকৃত ফর্ম))
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
উপরের স্নিপেটে:
যদি বুল = সত্য হয়, তবে আপনি মান '5' পাবেন;
তবে যদি বুল = মিথ্যা হয় তবে ত্রৈমাসিক ক্রিয়াকলাপটি মূল্যায়নের চেষ্টা করার সময় আপনি একটি নাল পয়েন্টার ব্যতিক্রম পাবেন। মুদ্রণ বিবৃতি নয়।
এটি ঠিক করতে আমি কেবল 'ফলাফল' এ পরিবর্তন করি
Long result = bool ? Long.valueOf(intVal) : longVal;
এটি করা, আমার প্রয়োজনীয় প্রত্যাশিত আচরণ দেবে:
যদি বুল = সত্য হয়, তবে আপনি মান '5' পাবেন;
তবে যদি বুল = মিথ্যা হয় তবে আপনি 'নাল' পেয়ে যাবেন
মজার অংশটি হ'ল আপনি যদি এটিকে স্বাভাবিক / / অন্য বিবৃতিতে ভাগ করেন তবে জাভা আপনাকে সংকলন করতে দেয় না
longVal = intVal;
তবে এটি টেরিনারি অপারেটরের মাধ্যমে তা ধরা দেয় না। তাই জাভা আসল স্নিপেটে এটিকে নাল পয়েন্ট করতে কী করছে?
(জাভা ১১)