Java中沒有指針,只存在值傳遞
對于對象(數(shù)組代承,類召锈,接口)的傳遞似乎有點像引用傳遞,可以改變對象中某個屬性的值杂伟。但是不要被這個假象所蒙蔽,實際上這個傳入函數(shù)的值是對象引用的拷貝仍翰,即傳遞的是引用的地址值赫粥,所以還是按值傳遞。
-
值傳遞
- 示例:
public class Test3 {
public static void change(int a){
a=50;
}
public static void main(String[] args) {
int a=10;
System.out.println(a);
change(a);
System.out.println(a);
}
}
很顯然輸出的 是10予借,10越平。傳遞的是值得一份拷貝频蛔,這份拷貝與原來的值沒什么關系。
-
內存分析:
- 引用傳遞
- 示例:
public class Test3 {
public static void change(int []a){
a[0]=50;
}
public static void main(String[] args) {
int []a={10,20};
System.out.println(a[0]);
change(a);
System.out.println(a[0]);
}
}
顯然輸出結果為10 50秦叛。實際傳遞的是引用的地址值晦溪。
-
內存分析:
示例:
class Emp {
public int age;
}
public class Test {
public static void change(Emp emp)
{
emp.age = 50;
emp = new Emp();//再創(chuàng)建一個對象
emp.age=100;
}
public static void main(String[] args) {
Emp emp = new Emp();
emp.age = 100;
System.out.println(emp.age);
change(emp);
System.out.println(emp.age);
System.out.println(emp.age);
}
}
輸出為:100 50 50.
-
內存分析:
- 對于String類:
public class Test {
public static void change(String s){
s="zhangsan";
}
public static void main(String[] args) {
String s=new String("lisi");
System.out.println(s);
change(s);
System.out.println(s);
}
}
輸出為:lisi lisi,由于String類是final修飾的挣跋,不可變三圆,它會在內存中在開辟一塊新空間。