整数+ 1和内存

时间:2016-05-27 08:59:56

标签: java integer

Chrome

任何人都可以帮助我理解堆和堆栈的内存变化。如果public class test{ public static void main(String[] args) { Integer i = new Integer(400); Integer x = i; i = i + 1; x == i; } } 比较记忆的地址?

2 个答案:

答案 0 :(得分:3)

这里唯一没有解释的行是:

i = i + 1;

由于自动装箱,这一行实际上相当于:

i = Integer.valueOf(i.intValue() + 1);
                      ^ auto-unboxing
            ^ autoboxing

所以intValue的{​​{1}}被移动到堆栈;添加1;然后可以在堆上创建i的新实例(因为不能保证高达401的值在内部被Integer缓存)。

至于Integer:假设你的意思是

x == i

由于System.out.println(x == i); x是不同的实例,因此总是会打印错误。

答案 1 :(得分:1)

示例:i指向地址a1;     x = i表示x指向a1;     i = i + 1表示x指向地址a2;     因此x == i将返回false,因为a1不等于a2