我刚刚看到类似这样的代码:
public class Scratch
{
public static void main(String[] args)
{
Integer a = 1000, b = 1000;
System.out.println(a == b);
Integer c = 100, d = 100;
System.out.println(c == d);
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,这段代码将打印出来:
false
true
Run Code Online (Sandbox Code Playgroud)
我理解为什么第一个是false:因为这两个对象是单独的对象,所以==比较引用.但我无法弄清楚,为什么第二个声明会回来true?当Integer的值在一定范围内时,是否会出现一些奇怪的自动装箱规则?这里发生了什么?
有一般建议使用Integer.valueOf(int)而不是new Integer(int)因为缓存.
在JDK 5+中,你应该真正使用,valueOf因为Integer现在Integer在-128和之间缓存对象,并且每次都127可以将同一Integer(0)对象交给你,而不是在一个全新的相同Integer对象上浪费对象构造.
如何扩大范围?