我试图查看Java中某些Type的真实表格。
我无法理解前一个返回true而一个下面是假的?
public class CompareTypes{
public static void main(String[] args){
// -------------------------------------
Integer AA = 12;
Integer BB = 12;
System.out.println( AA == BB ); // true
// -------------------------------------
Integer a = 128;
Integer b = 128;
System.out.println( a == b ); // false
}
}
答案 0 :(得分:1)
你看到了一个自动装箱的神器。
Integer
个对象具有不同的对象ID,这意味着两个不同的Integer
对象将false
用于==
。但是,valueOf
方法会缓存Integer
对象的前127个值。当您在-128和+127之间创建Integer
时,通过其valueOf静态工厂,您将获得完全相同的对象。当您使用值> = 128创建一个时,您每次都会获得一个全新的对象,但ID值不同,因此无法直观地响应==
调用。
Autoboxing使用valueOf
方法进行自动装箱,这就是为什么对象引用创建为Integer
对象来自int
个小于128的文字。但是,创建两个值为128的Integer
个对象的行会创建两个不同的对象。
故事的寓意是
.equals()
用于值类型https://blogs.oracle.com/darcy/entry/boxing_and_caches_integer_valueof