整数记忆
当我写:
Integer i = 5;
Integer i = new Integer(5);
这两行相等吗?
在内存中,类型i将像这两行一样在堆中分配吗?如果是的话,这一切是如何在记忆中发生的?
回答
这两条线相等吗?
不。
第一行与
Integer i = Integer.valueOf(5);
编译器将代码重写为该代码,这称为自动装箱。
请参阅Javadoc 以了解Integer.valueOf:
如果不需要新的 Integer 实例,则通常应优先使用此方法而不是构造函数 Integer(int),因为此方法通过缓存频繁请求的值可能会产生明显更好的空间和时间性能。此方法将始终缓存 -128 到 127(含)范围内的值,并且可能缓存此范围之外的其他值。
因此,Integer.valueOf(5) == Integer.valueOf(5)(每次都返回相同的实例)而new Integer(5) != new Integer(5)(每次都创建一个新实例)。
但在所有情况下 - 与 Java 中的所有对象一样 - Integer 对象都在堆上。