Java在方法參數傳遞時:
1、對于基本類型,傳遞值
2、對于對象類型,傳遞對象引用
需要注意的是:對于上述兩種傳遞類型,在傳遞時都是拷貝傳遞,即值傳遞時拷貝出一個新值,引用
傳遞時拷貝出一個新的拷貝。
有時候也說Java只有值傳遞,意思是對于引用類型,傳遞引用的值。一個概念,不用糾纏。
在內存中對象類型可以看做兩塊,一塊是對象的引用,一塊是數據區。引用塊里面保存了數據區的地址。
看如下示例代碼:
1 public class Test {
2
3 public static void main(String[] args) {
4 // 值傳遞
5 int i = 1;
6 addInt1(i);
7 System.out.println(i);// 輸出1
8 addInt2(i);
9 System.out.println(i);// 輸出1
10
11 // 引用傳遞實例1
12 String str = "123";
13 modifyStr1(str);
14 System.out.println(str);// 輸出123
15
16 // 引用傳遞實例2
17 StringBuilder stringBuilder = new StringBuilder("123");
18 modifyStringBuilder(stringBuilder);
19 System.out.println(stringBuilder.toString());// 輸出123456
20 }
21
22 // 拷貝了新的值,原值不變
23 public static void addInt1(int i) {
24 i = 2;
25 }
26
27 // 拷貝了新的值,原值不變
28 public static void addInt2(int i) {
29 i++;
30 }
31
32 // 新的拷貝引用指向了一塊新數據區,原拷貝仍然指向原數據區
33 public static void modifyStr1(String str) {
34 str = "456";
35 }
36
37 // 新的拷貝引用仍然指向原數據區,但修改了原數據區的內容
38 public static void modifyStringBuilder(StringBuilder str) {
39 str.append("456");
40 }
41
42 }
posted on 2011-03-31 14:05
liucs 閱讀(304)
評論(0) 編輯 收藏 所屬分類:
Java