【发布时间】:2013-08-03 20:38:42
【问题描述】:
如果一个方法有一个局部变量i:
int i = 10;
然后我分配一个新值:
i = 11;
这会分配一个新的内存位置吗?还是直接替换原来的值?
这是否意味着原语是不可变的?
【问题讨论】:
-
它将替换原来的。 Java 原语不是对象。
Integer(和其他原始包装类)是不可变的。 -
@BrianRoach 不,他没有。根据您的逻辑,字符串是可变的:
String str = "test"; str = "newStr";。要回答 OP 的问题,它们实际上是不可变的。如果你考虑i++,那真的是:i = i + 1。您可以看到它采用i的值,加一并将i重新分配给这个新值。 -
对不起,你们现在把我弄糊涂了.....
-
我实际上并不认为这是一个坏问题……不知道为什么会有这么多反对票。
-
@BrianRoach 我也一直在研究ballmer curve