作者legnaleurc (CA)
看板java
标题Re: [问题] 请教一个基本的问题
时间Thu Dec 3 22:02:37 2009
※ 引述《adrianshum (Alien)》之铭言:
: 把它理解为 "obj 就是 call by ref" ,包准你会
: 在另一种情况下搞混。
:
: 例如:
:
: void foo(String a) {
: a += "foo";
: }
:
: String x = "xxx";
: foo(x);
: // x 的结果是什麽?
:
: 很不幸,把东西说成 "物件就是 call by ref"
: 对这种情况十居其九都会搞错
:
: 何不好好理解一下 Java 自己的说法: Java 只有 pass-by-value.
:
: object 传的是 reference (或者理解为 handle, pointer etc) 的
: copy. 只为这个 copy 和原本的 reference 都是指向同一 object,
: 所以修改 obj 的内容,caller 也会看得到.
: 推 petertc:从这样的结果来看String的行为与primitive type相同 12/02 17:01
: → petertc:但String不是primitive type吧? 12/02 17:03
String 的情况不同, 它不是 primitive type
但是它是 immutable object
也就是说一旦建构完成, 此物件的内容就不能再改变了
之後所有的改变都是新增一个复本, 所以不会作用回 function 外
其他还有 Integer, Double ... 等
--
自High笔记(半荒废)
http://legnaleurc.blogspot.com/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.104.49.160
※ 编辑: legnaleurc 来自: 112.104.49.160 (12/03 22:07)
1F:→ sbrhsieh:既然是 immutable,就不会有「之後所有的改变」,除非 12/03 23:12
2F:→ sbrhsieh:"immutable"与"所有的改变"是针对不同的东西而言 12/03 23:14
3F:→ legnaleurc:嗯~~的确是有语病 QQ 12/03 23:32
4F:→ godfat:a+=b如果是a=a+b的缩写,而不是+=method,当然改不了instance 12/03 23:45
5F:→ legnaleurc:我後来仔细想一下, 应该跟 immutable 没关系 12/04 00:26