正在加载图片...
程中,这个 reference被覆盖了,实际上就是被扔掉了;而它所指的那 个对象会被垃圾回收器清理掉。) 这种现象通常被称为 aliasing(别名效应),这是Java操控对象的基本方 法。但是如果你想避免 aliasing又应该怎么作呢?你可以进一步对具体 的数据成员进行赋值: n1,i= n2.i 与丢掉一个对象,再将n1和n2都绑到同一个对象相比,这样就能保留 两个相互独立的对象了。不过你很快就会知道直接操控对象内部的数据是 很麻烦的,而且有违OO设计的原则。这个课题不是一两句话就能讲清楚 的,所以我们把它放到附录A里,我们会在那里专门探讨 aliasing的。 在此期间,你只要知道为对象赋值可能会与你的初衷大相径庭就行了 方法调用期间的 aliasing 把对象传给方法的时候,也会有 aliasing的问题: //: c03: Passobject. java Passing objects to methods may not be what / you're used to. import com. bruceeckel. simpletest. class Letter i public class Passobject i static Test monitor =new Test ()i static void f(Letter y) t y public static void main(String[] args)t Letter x new letterof X. c System. out. println("1:xC:#+x c)i System. out. println ("2:xc:+ monitor. expect (new String[] i 在很多编程语言里,方法f()会在它的作用域里对参数 Letter y作一份 拷贝。但这里传的还是 reference,所以下面这行 第5页共48页shhgs@wgqqh.com ￾ 5 ✁ ✂ 48 ✁ â* × referen ce T¶·, ñ™JT¸¹, àADy(Y ×¥_ºTº»¼½¾¿¢¹) †í_·TU™ aliasing (°ÑØv)  Java ¥_(G µ ÄÅ¡|ÀÁ al iasin g üvwÕZ1ÂÊ¡ÝE(3Ã¥Ä/ ("#Ž%(~L0 n1.i = n2.i; „Ź3×¥_ Á n 1  n 2 ÆÆg‡3×¥_>8 ¦;µÇ e×>Ȳ³(¥_,X^¡ŠCºÉҐ¥_("# ŠÊË( àmÌ OO ?@(ås ×4dX3eŒ›;©¿Í ( DEWPAkg,5 A Ë WºFY˟ ÎÏ al iasin g ( Fò@4 ¡ó%ə¥_~LÝ;º„¡(fÐÂ>ÑÒ,  aliasin g P¥_Ó¬µ(M [ºm al iasin g (cd0 //: c03:PassObject.java // Passing objects to methods may not be what // you're used to. import com.bruceeckel.simpletest.*; class Letter { char c; } public class PassObject { static Test monitor = new Test(); static void f(Letter y) { y.c = 'z'; } public static void main(String[] args) { Letter x = new Letter(); x.c = 'a'; System.out.println("1: x.c: " + x.c); f(x); System.out.println("2: x.c: " + x.c); monitor.expect(new String[] { "1: x.c: a", "2: x.c: z" }); } } ///:~ FŠVáâƒË µ f( )ºFA(1ˆÔË¥ " Letter y 13ú € ËÓ( referen ce DE¶ 
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有