Java ==奇怪的行为

eat*_*ode 0 java equality

我想在我的应用程序中检查Integer相等,但遇到了一个奇怪的行为.在某些时候我的应用程序正常工作,但在某些时候它失败了.所以我在这里写了一个测试代码

public class EqualityTest {

     public static void main(String args[]) {
           Integer a = 100;
           Integer b = 100;
           Integer c = 1000;
           Integer d = 1000;
           if (a == b) {
                 System.out.println("a & b are Equal");
           }
           else {
                 System.out.println("a & b are Not Equal");
           }

           if (c == d) {
                 System.out.println("c & d are Equal");
           } else {
                 System.out.println("c & d are Not Equal");
           }
     }
}
Run Code Online (Sandbox Code Playgroud)

产量

a & b are Equal
c & d are Not Equal
Run Code Online (Sandbox Code Playgroud)

这里我的问题是为什么c和d不相等?

Nar*_*hai 6

Integer使用-128到127范围内的小值缓存,因此您可以获得小值(如100)的相同实例.

对于此范围之外的值,将Integer创建并返回新实例.