我刚刚看到类似这样的代码:
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的值在一定范围内时,是否会出现一些奇怪的自动装箱规则?这里发生了什么?
我正在研究一些java类,并且重写了.equals(Object)测试我的类的整数变量的方法,当它发出错误说我无法使用原始类型int时,我很惊讶,当我确定它在java文档中说编译器会自动将原始类型自动放映到方法的包装类型中.
public boolean equals(Object o)
{
if (!(o instanceof myClass))
return false;
myClass mc = (myClass)o;
return (this.myInt.equals(mc.getMyInt()));
}
Run Code Online (Sandbox Code Playgroud)