狼人
走在SCJP的路上
posts - 12,  comments - 14,  trackbacks - 0

 

 1public class IntReference {
 2    private int level = 0;
 3    
 4    public static void main(String[] args) {
 5        IntReference ag1 = new IntReference();
 6        IntReference ag2 = new IntReference();
 7        ag1.level = 1;
 8        ag2.level = 2;
 9        System.out.println("A:ag1.level = " + ag1.level);
10        System.out.println("A:ag2.level = " + ag2.level);
11    //    ag1 = ag2;
12    /** 上面这种写法,原本ag1包含的对对象的引用,是指向一个值为1的对象。
13     *  在对t1赋值的时候,这个引用被覆盖,也就是丢失了而那个不再被引用的
14     *  对象会由"垃圾回收器"自动清理。为此为了避免这种现象,应该用下面这
15     *  种写法,这样可以保持两个对象彼此独立,而不是将ag1、ag2捆绑到相同
16     *  的对象上。*/

17        ag1.level = ag2.level;
18        System.out.println("B:ag1.level = " + ag1.level);
19        System.out.println("B:ag2.level = " + ag2.level);
20        ag1.level = 3;
21        System.out.println("C:ag1.level = " + ag1.level);
22        System.out.println("C:ag2.level = " + ag2.level);
23    }

24}

 1public class ObjectReference {
 2    private char charA = 'a';
 3    
 4    public void f(ObjectReference b) {
 5        b.charA = 'b';
 6    }

 7    
 8    public static void main(String[] args) {
 9        ObjectReference objReference = new ObjectReference();
10        objReference.charA = 'c';
11    //    A:objReference.charA = c
12        System.out.println("A:objReference.charA = " + objReference.charA);
13    /**    传递一个引用,而不是f(objReference)要在其作用域内复制其参数ObjectReference b的一个副本。*/
14        objReference.f(objReference);
15    //  B:objReference.charA = b    
16        System.out.println("B:objReference.charA = " + objReference.charA);
17    }

18}
posted on 2009-01-03 17:37 狼人 阅读(229) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航:
 

<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜