别名现象

别名现象

 

 1 public   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}

 1 public   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}

你可能感兴趣的:(别名现象)