作者sbrhsieh (sbr)
看板java
标题Re: [问题]传入物件的修改方式
时间Fri Aug 21 19:36:20 2009
※ 引述《vencil (vencs)》之铭言:
: 另外我还想问的问题就是
: private static Distance newDistance(Distance a){
: a = new Distance(a.getD() - 1);
: return a;
: }
: 像上述的程式码这样,对於物件的修改要怎麽样才会产生或不产生影响?
这个部分严格来说要了解 l-value/r-value 的分别。
对纯 Java programmer 来说,至少要清楚 operator=(assignment) 的目标。
就
a = new Distance(a.getD() - 1);
来说,operator= 所作用的是变数 a 本身(变数本身所使用的空间),而跟 a 所持有
的值无关。也就是说此 statement 的 side effect 跟 a 的值所参考的 object
无关(a 也可能不参考任何物件)。
假如 class: Distance 有个 accessible field: unit,
private static Distance newDistance(Distance a){
a.unit = ...;
return a;
}
此时 operator= 是作用在 a 变数的值所参考的物件的某个 field(field 所占据的
空间),於是 newDistance method 的 side effect 就会出现在 a 所参考的
物件上(if any)。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.142.250
1F:推 vencil:终於看懂了 感谢说明 08/21 21:54