Java'da Integer a = 127 va int b = 127 hamda Integer a1 = 128 va int b1 = 128 ni taqqoslashda nima bo'ladi? Nima uchun taqqoslash natijalari farq qilishi mumkinligini tushuntiring.
sobes.tech AI
AIdan javob
Integer a = 127 va int b = 127 ni taqqoslash operatori == bilan, natijasi true bo'ladi. Bu int b ning Integer ob'ektiga avtomatik qadoqlanishi (autoboxing) va 127 qiymati Integer ob'ektlarining keshlangan diapazonida (standartda -128 dan 127 gacha) bo'lishi bilan bog'liq. Java bu qiymatlar uchun ob'ektlar havzasidan foydalanadi, shuning uchun a va qadoqlangan b bir xil ob'ektga ishora qiladi.
Integer a1 = 128 va int b1 = 128 ni taqqoslaganda, == operatorining natijasi false bo'ladi. Garchi b1 ham avtomatik ravishda Integer ob'ektiga qadoqlansa, 128 qiymati keshlangan diapazondan tashqarida. Shuning uchun, autoboxing jarayonida, b1 uchun yangi Integer ob'ekti yaratiladi. a1 va qadoqlangan b1 turli ob'ektlarga ishora qiladi, hatto ularning raqamli qiymatlari bir xil bo'lsa ham.
Ob'ektlarni qadoqlovchi (masalan, Integer) qiymatlarini solishtirish uchun equals() metodidan foydalanish kerak.
// Qiymatlarni solishtirish
Integer a = 127;
int b = 127;
System.out.println(a == b); // true (autoboxing va `Integer` kesh bilan)
System.out.println(a.equals(b)); // true (qiymatlarni solishtirish)
Integer a1 = 128;
int b1 = 128;
System.out.println(a1 == b1); // false (autoboxing, ammo bu qiymat uchun kesh yo'q)
System.out.println(a1.equals(b1)); // true (qiymatlarni solishtirish)
Integer a2 = new Integer(127); // Yangi ob'ekt yaratiladi, qiymat keshda bo'lsa ham
Integer a3 = new Integer(127);
System.out.println(a2 == a3); // false (turli ob'ektlar)
System.out.println(a2.equals(a3)); // true (qiymatlarni solishtirish)
Shunday qilib, == ob'ektlar havzalarini taqqoslaydi, wrapper turlar uchun, primitive turlar yoki wrapper ob'ektlarning qiymatlarini taqqoslash uchun equals() ishlatiladi. Integer ning [-128, 127] diapazonida keshga olinishi, bu diapazondagi raqamlar bilan ishlashda == natijasiga ta'sir qiladi.