令人震惊:为什么在Java中1 == 1是🟢 true,而128 == 128是🔴 false?

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

在Java中,==用于比较引用,.equals()用于比较值。-128到127范围内的Integer对象会被缓存,因此==比较返回true。超出此范围会创建新对象,==返回false。比较Integer值应使用.equals()。

🎯

关键要点

  • 在Java中,==用于比较引用,.equals()用于比较值。
  • Java缓存-128到127范围内的Integer对象,因此在此范围内使用==比较返回true。
  • 超出缓存范围(如128及以上)时,会创建新的Integer对象,导致==比较返回false。
  • 比较Integer值时应使用.equals()而不是==。
  • 总结:1 == 1返回true,因为两个对象指向相同的缓存引用。
  • 128 == 128返回false,因为Java为超出缓存范围的值创建了不同的对象。
  • 在比较非基本类型(如Integer)时,始终使用.equals()。

延伸问答

在Java中,==和.equals()有什么区别?

在Java中,==用于比较引用是否相同,而.equals()用于比较对象的值是否相等。

为什么在Java中1 == 1返回true?

因为1在-128到127的缓存范围内,两个对象指向相同的缓存引用。

为什么128 == 128返回false?

因为128超出了缓存范围,Java为每个128创建了不同的Integer对象,因此引用不同。

在Java中如何正确比较Integer值?

应使用.equals()方法来比较Integer值,而不是使用==。

Java中Integer对象的缓存范围是什么?

Java缓存的Integer对象范围是-128到127。

在Java中使用==比较非基本类型有什么风险?

使用==比较非基本类型可能导致错误的结果,因为它比较的是引用而非值。

🏷️

标签

➡️

继续阅读