AFAIK以下代码......
void foo () {
Integer i1 = new Integer(2);
Integer i2 = new Integer(2);
Integer i3 = new Integer(2);
i3 = i1 + i2;
}
...实际上会在执行+运算符时创建一个新的整数对象,并将其地址分配给i3。
原始类型也适用吗?即:
void foo () {
int i1 = 2;
int i2 = 2;
int i3 = 2;
i3 = i1 + i2;
}
...或者在这种情况下i3会将它的地址保存在内存中,并将i1 + i2的结果复制到该地址吗?
提前谢谢。
答案 0 :(得分:3)
你的术语有点混乱.... i3
的值根本不是地址(或引用),它只是 整数值。但不,您提供的示例不会创建任何Integer
个对象。
答案 1 :(得分:2)
原语不是对象....所以没有:))
答案 2 :(得分:2)
原始不是一个对象 - 没有。
答案 3 :(得分:1)
让我回答一下你的问题有点颠倒:
Integer i1 = new Integer(2);
Integer i2 = new Integer(2);
Integer i3 = new Integer(2);
i3 = i1 + i2;
VS
int i1 = 2;
int i2 = 2;
int i3 = 2;
i3 = i1 + i2;
在这两种情况下,{em>完全相同的事情发生在i3
变量上:它的值被覆盖并且其地址保持不变。唯一的区别在于这些值的含义。
NB。由于您使用的Integer
实例不会转义该方法,因此实际的本机代码可能根本不会进行任何分配,并且在两种情况下都可能完全相同。