作者tkcn (小安)
看板java
标题Re: [问题] 新手问题
时间Fri Aug 5 12:45:19 2011
※ 引述《peacedove (林帛亨加油!!!)》之铭言:
: ※ 引述《singlovesong (~"~)》之铭言:
: : String a = new String("Test String!");
: : String b = a;
: : 想请问
: : 这样子的意思是什麽意思呢?
: : 是把a 的reference 复制给b
: : 还是把a的内容复制给b
前者。
: : 如果是前者的话 那麽从a改内容 是不是b"指"到的这个String 也会更着改
理论上: 是。
不过因为对象是 String,具有 immutable 特性,
没有办法去修改 a (所指向的 String) 的内容,
所以实际上是做不到这样的事情。
如果把 String 换成其他 mutable 的物件,
因为 a 跟 b 其实指到的是 "同一个物件",
修改了 a (所指向的物件),自然也会影响到 b (所指向的物件),
而不是 "修改 a,b 也会跟者改"。
: 然後因为 immutable 的关系,所以你改动其中一个String,并不会影响到另外一个String
: 应该就是当你写
: String a = "test";
: 记忆体配置一块"test"的区域 然後把a 指向那块区域
这与 immutable 无关,
如同你所说,这是新增一个 String,并且让 a 指向它。
并不是修改 a (所指向物件) 的内容。
immutable 指的是 "你无法修改物件的内容"。
String 所提供的一些 method,像是 replace*(),
其实并不是修改原物件的内容,而是回传新的物件。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.78.231
1F:推 peacedove:不是就是因为immutable所以他必须新增一个String嘛?? 08/05 14:10
你的原文写:
"""因为 immutable 的关系,所以你改动其中一个String,并不会影响到另外一个String"""
我想这里必须先把所谓的 "改动" 定义清楚是何者:
1. 修改 String 的内容。
2. 指向新的物件。
单就 "改动" 字面上来看,我认为是定义 (1),
不过从你的说法来看,应该是定义 (2),
然而若是定义 (2),即使物件不是 immutable,也不会影响到另一个物件。
当然你的推文所说也没错,只不过已经离原发问者的问题有点远了。
2F:推 singlovesong:谢谢! 08/05 14:20
※ 编辑: tkcn 来自: 140.114.78.231 (08/05 14:46)