导言
- 先看一下下面的代码,你觉得代码输出的结果是什么
Integer a = 1000;
Integer b = 1000;
Integer c = 100;
Integer d = 100;
System.out.println("a == b is " + (a == b));
System.out.println(("c == d is " + (c == d)));
解释
Integer a = 1000; Integer b = 1000;* 这段代码创建了两个Integer对象a和b,它们的值都是 1000。由于 Java 的自动装箱机制(Autoboxing),数字 1000 被装箱为两个不同的Integer对象。 在 Java 中,==比较的是两个引用的内存地址,而不是值。当数值超出某个范围时(例如 1000 这个值),不会从缓存中复用相同的对象,因此 a 和 b 实际上是指向不同的对象。“所以,a == b是false,因为它们是两个不同的对象。”Integer c = 100; Integer d = 100;这段代码创建了两个Integer对象c和d,它们的值都是 100。Java 的Integer缓存机制(Integer Cache)会缓存 -128 到 127 之间的Integer对象,以优化内存使用。由于 100 在这个缓存范围内,所以 c 和 d 实际上指向的是同一个缓存中的对象。换句话说,c 和 d 引用的是相同的内存地址。因此,c == d是true,因为它们是同一个对象的引用。
总结
除了Integer,还有Byte,Short,Long,Boolean,Character 缓存
