Java类型、值比较
我想看看Java中某种类型的表是什么
我不明白上面的一个返回真,下面的一个返回假
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
}
}
# 1 楼答案
你看到的是自动装箱的人工制品
Integer
对象具有不同的对象id,这意味着两个不同的Integer
对象将是==
的false
。但是,valueOf
方法缓存Integer
对象的前127个值。当您通过静态工厂的值创建一个介于-128和+127之间的Integer
时,您会得到完全相同的对象。当您创建一个值为>;=128然后每次都会得到一个全新的对象,具有不同的id,因此不会直观地响应==
调用自动装箱使用
valueOf
方法来进行自动装箱,这就是为什么对象引用从int
文本中创建为Integer
对象的工作少于128个。但是,创建两个值为128的Integer
对象的行会创建两个不同的对象这个故事的寓意是
.equals()
https://blogs.oracle.com/darcy/entry/boxing_and_caches_integer_valueof