为什么在Java中“ 1000 == 1000”为假,并且“ 100 == 100”是真的?这是一个有趣的讨论话题。如果您运行以下代码:Integera = 1000,b = 1000; System.out.println(a == b); // 1Integerc = 100,d = 100; System.out.println(c == d); / / 2您将获得有关false true的基本知识:我们知道,如果两个引用指向同一个对象,则使用==表示它们相等。如果两个引用指向不同的对象,则即使它们的内容相同,也请使用==表示它们不相等。因此,后面的陈述也应该是错误的。这是有趣的地方。如果查看Integer.java类,您会发现有一个内部私有类IntegerCache.java,该类可缓存-128到127之间的所有整数对象。那么当我们声明类似Integerc = 100;之类的东西时,它实际上在内部执行的操作是:Integeri = Integer.valueOf(100);现在,如果我们看一下valueOf()方法,我们可以看到publicstaticIntegervalueOf(inti){if(i> = IntegerCache.low& ireturnIntegerCache.cache [i +(-IntegerCache.low)]; returnnewInteger(i);}如果值范围在-128到127之间,它将从缓存中返回实例。因此... Integerc = 100,d = 100;指向同一个对象,这就是我们编写System.out.println的原因。 (c == d);我们可以成立,现在您可能会问,为什么这里需要高速缓存呢?逻辑上的原因是,在此范围内的“小”整数的使用率高于大整数。 ,使用相同的基础对象很有价值,并且可以减少潜在的内存占用,但是,您将误用反射API的此功能,请运行以下代码并享受其魅力publicstaticvoidmain(String [] args)throwsNoSuchFieldException,IllegalAccessException {Classcache = Integer。 class.getDeclaredClasses()[0]; // 1FieldmyCache = cache.getDeclaredField(“ cache”); //2myCache.setAccessible(true);//3In teger [] newCache =(Integer [])myCache.get(cache); // 4newCache [132] = newCache [133]; // 5inta = 2; intb = a + a; System.out.printf(“%d + %d =%d“,a,a,b); //}