【发布时间】:2014-11-19 10:22:02
【问题描述】:
我看了这篇文章:Combination of getter and list modification in Java
现在我想知道是否只能通过 getter 访问来修改所有类型的类属性。 我尝试了一个整数对象
public class SomeClass
{
private Integer someInteger = 9;
public Integer getSomeInteger()
{
return someInteger; // id = 18, value = 9
}
}
现在我尝试在另一个类中修改 someInteger:
SomeClass someClass = new SomeClass();
Integer someInteger = someClass.getSomeInteger(); // id = 18, value = 9
someInteger += 1; // id = 26, value = 10
Integer anotherInteger = someClass.getSomeInteger(); // id = 18, value = 9
我使用调试器检查对象 ID。在我的调用类中, someInteger 首先具有与 getter 中相同的 ID。加1后,someInteger得到一个新的id,原来的class属性没有被编辑。
好吧,我尝试添加数字失败了,但是否有可能修改原始对象?
我询问了我的 List 链接示例与我的 Integer 示例之间的区别。 我的想法是,
someInteger += 1;
在内部创建一个新的 Integer 对象。相比之下,列表有自己的修改方法,不会导致新列表对象的实例化。这是正确的吗? 由此可以得出结论,我可以通过 getter 访问的所有具有自我修改方法的数据类型都必须受到保护,以免被其他类修改?
【问题讨论】:
-
stackoverflow.com/questions/40480/… 应该会回答您的问题。您本地的
Integer someInteger与课堂上的引用不同。修改你的不会触及另一个。由于Integer是不可变的,您将通过执行“+1”创建一个新对象(由于自动装箱/拆箱,应该相当于someInteger = Integer.valueOf(someInteger.intValue() + 1))