+2 امتیاز
قبل در برنامه نویسی توسط (7.2هزار امتیاز)
آیا بکار بردن عملگر == برای کلاس های Long , Integer کار اشتباهی است؟ آیا ممکن است دو کلاس Integer که مقدار یکسانی دارند نتیجه عملگر == بر آنها مقدار false را برگرداند؟

1 پاسخ

+2 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

بله این کار اشتباه است، بدلیل اینکه کلاس های Long و Integer جزء انواع داده ارجاعی هستند و عملگر == برای داده های ارجاعی آدرس محلی از حافظه متغییر ارجاعی به آن اشاره می کند را مقایسه می کند، در نتیجه دو متغییر Integer که مقدار یکسانی دارند (مقدار عددی) نتیجه عملگر == بر آنها مقدار false را برگرداند:

        Integer integer1 = new Integer(5);
        Integer integer2 = new Integer(5);

        if (integer1 == integer2) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }

        integer1 = integer2;

        if (integer1 == integer2) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }

خروجی کد بالا بصورت زیر است:

false
true

و راه درست استفاده از متد equals در کلاس Integer است:

        Integer integer1 = new Integer(5);
        Integer integer2 = new Integer(5);

        if (integer1.equals(integer2)) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }

و یا استفاده از متد intValue در کلاس Integer است:

        Integer integer1 = new Integer(5);
        Integer integer2 = new Integer(5);

        if (integer1.intValue() == integer2.intValue()) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }
قبل توسط (7.2هزار امتیاز)
یعنی هنگام مقایسه int و Integer به صورت تلویحی Integer با فراخوانی متد intValue() به int تبدیل می شود؟
قبل توسط (1.1هزار امتیاز)
+1
بله دقیقا.
سوال شده 9 سال قبل در برنامه نویسی توسط (778 امتیاز)
ویرایش شده 9 سال قبل توسط
استفاده از متد contains در لیستی از Integer ها

سوالات مشابه

+2 امتیاز
2 پاسخ 6.0هزار بازدید
+1 امتیاز
2 پاسخ 803 بازدید
+1 امتیاز
1 پاسخ 477 بازدید
+1 امتیاز
1 پاسخ 820 بازدید
+2 امتیاز
1 پاسخ 718 بازدید
0 امتیاز
1 پاسخ 681 بازدید
+1 امتیاز
1 پاسخ 685 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط kashi (7.2هزار امتیاز)
+3 امتیاز
1 پاسخ 762 بازدید
+1 امتیاز
2 پاسخ 2.1هزار بازدید
0 امتیاز
0 پاسخ 493 بازدید
...