我正在编写一些测试代码并发现了一个奇怪的事情,并且仍然混淆了这是怎么回事?
Integer i1 = 220;
Integer i2 = 220;
System.out.println(i1 == i2);
按预期打印 false 。但
Integer i1 = 20;
Integer i2 = 20;
System.out.println(i1 == i2);
打印 true ,但两者都是引用不同对象的不同引用(我假设)。
为什么第二个代码段会打印 true ?
答案 0 :(得分:2)
==
运算符仅适用于介于-128和127之间的Integer
值。这就是为什么它不适用于220而是适用于20.一般情况下,最好始终使用{{} 1}}在比较.equals()
时,您永远不应该依赖Integers
运算符。
可在此处找到更多信息:https://www.owasp.org/index.php/Java_gotchas#Immutable_Objects_.2F_Wrapper_Class_Caching