class D {
public static void main(String args[]) {
Integer b2=128;
Integer b3=128;
System.out.println(b2==b3);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
false
Run Code Online (Sandbox Code Playgroud)
class D {
public static void main(String args[]) {
Integer b2=127;
Integer b3=127;
System.out.println(b2==b3);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
Run Code Online (Sandbox Code Playgroud)
注意:-128到127之间的数字为真.
这里他们是同一个实例:
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2); // outputs "true"
Run Code Online (Sandbox Code Playgroud)
但在这里他们是不同的实例:
Integer integer1 = 128;
Integer integer2 = 128;
System.out.println(integer1 == integer2); // outputs "false"
Run Code Online (Sandbox Code Playgroud)
为什么包装器对象仅在值127内共享同一实例?
Integer a = 5;
int b = 5;
System.out.println(a==b); // Print true
Run Code Online (Sandbox Code Playgroud)
但是为什么这个打印是真的,因为a是a的实例Integer而b是原始的int?
我知道我正在比较参考,而我正在使用==这不是一个好主意,但我不明白为什么会发生这种情况.
Integer a=100;
Integer b=100;
Integer c=500;
Integer d=500;
System.out.println(a == b); //true
System.out.println(a.equals(b)); //true
System.out.println(c == d); //false
System.out.println(c.equals(d)); //true
Run Code Online (Sandbox Code Playgroud) Integer a = 127;
Integer b = 127;
System.out.println(a == b);
Run Code Online (Sandbox Code Playgroud)
结果是真的,但是:
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
Run Code Online (Sandbox Code Playgroud)
结果是错误的.为什么?
请有人解释一下,为什么答案是真的和错误的
public class IntegerTest {
public static void main(String[] args) {
Integer x = 1000;
long y = 1000;
Integer z = 1000;
System.out.println(x == y);
System.out.println(x == z);
}
}
Run Code Online (Sandbox Code Playgroud)