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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
