作者adrianshum (Alien)
看板java
标题Re: [问题] 请教一个基本的问题
时间Mon Nov 30 12:46:29 2009
※ 引述《ERP2 (两津)》之铭言:
[43]
: 这我可以理解,因为两个a值参照的是不同物件。
: 只是疑惑为什麽上一题的array没有将结果指定回就可以保留运算结果。
:
:
: 谢谢大家。 :)
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 118.167.172.8
: → ERP2:自己回答一下: 是因为array是" call by reference"的吗? 11/30 02:23
: → etman395:是的 在java中 array是物件 只要是物件就是call by ref.. 11/30 02:50
: → ERP2:谢谢你^^ 11/30 03:12
推文等太久,乾脆回文。
把它理解为 "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 也会看得到.
: → Jichang:物件的时候是同一个物件 基本型别时是 call by value 11/30 09:00
: → petr:Java只有call by value,要去了解Java memoey model 11/30 11:49
: → petr: memory 11/30 12:06
: → adrianshum:把它叫成 "call-by-ref" 包准你会有其他错误。何不把 11/30 12:40
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.77.19.136
※ 编辑: adrianshum 来自: 219.77.19.136 (11/30 12:47)
1F:推 ERP2:谢谢你~~ 11/30 22:24
2F:推 petertc:所以这题的答案是? 12/01 11:12
3F:→ ERP2:a的内容在main中没有改变 还是"xxx"吧? 12/01 21:34
4F:推 petertc:从这样的结果来看String的行为与primitive type相同 12/02 17:01
5F:→ petertc:但String不是primitive type吧? 12/02 17:03