为什么比较两个整数使用==有时工作,有时不工作?

Hir*_*ren 1 java comparison types

我知道我正在比较参考,而我正在使用==这不是一个好主意,但我不明白为什么会发生这种情况.

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)

chr*_*ke- 11

Java语言规范说,至少-128到127的包装器对象被缓存并重用Integer.valueOf(),这是自动装箱隐含使用的.