在Java中使用原语是否会创建新对象?

时间:2014-01-21 14:16:45

标签: java

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的结果复制到该地址吗?

提前谢谢。

4 个答案:

答案 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实例不会转义该方法,因此实际的本机代码可能根本不会进行任何分配,并且在两种情况下都可能完全相同。