Java中参数的值传递--转自http://note.youdao.com/share/web/file.html?id=53341f7cca29916f131cd79985c4791f&type=note
Java中方法调用时参数的传递方式都是值传递。细分为以下两种情况:
变量名称
|
本身的值或者引用地址的值
|
地址
|
对象的值
|
public class Test {
public static void main(String[] args) {
// 1
int i=0;
modifyInt(i);
System.out.println(i);
// 2
String s1 = "a";
modifyStr(s1);
System.out.println(s1);
// 3
String s2 = new String("a");
modifyStr(s2);
System.out.println(s2);
// 4
String[] arr1 = {"a", "b"};
modifyArr(arr1);
System.out.println(arr1[0]+","+arr1[1]);
// 5
String[] arr2 = {"a", "b"};
modifyArr2(arr2);
System.out.println(arr2[0]+","+arr2[1]);
}
public static void modifyInt(int t){t=1;}
public static void modifyStr(String t){t = "c";}
public static void modifyStr2(String t){t = new String("c");}
public static void modifyArr(String[] t){t[0]="c";}
public static void modifyArr2(String[] t){t = new String[]{"c"};}
}
1. i变量在栈中如下
i
|
0
|
i
|
0
|
t
|
0
|
i
|
0
|
t
|
1
|
2. 同1
3. s2变量在栈中如下
s2
|
0001(引用的堆中的首地址)
|
0001
|
"a"
|
s2
|
0001
|
t
|
0001
|
0001
|
"a"
|
0002
|
"c"
|
t
|
0002
|
s2
|
0001
|
t
|
0002
|
4. arr1变量在栈中如下
arr1
|
0003(引用的堆中的首地址)
|
0003
|
{"a", "b"}
|
arr1
|
0003
|
t
|
0003
|
0003
|
{"c", "b"}
|