بله این کار اشتباه است، بدلیل اینکه کلاس های 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);
}