Java中方法引數傳遞只有值傳遞
將值拷貝一份進行傳遞
1.對于八種基本資料型別和String,傳遞資料值的副本
基本資料型別傳遞后,原來的值不變,區域變數(在方法堆疊里)在方法結束后就被回收了
void change(int value) {
value = https://www.cnblogs.com/potato20522/p/0;
}
num = 123
change(num);
System.out.println(num);//123,不變
對于String型別
void change(String str){
str +="def";//方法堆疊中的str指向了字串常量池中的"def",方法結束后就沒了
//或者str = new String("def");
}
String s = "abc";
change(s);
System.out.println(s);//abc
2.對于參考型別,傳遞的是地址值的拷貝,地址值不會變,地址指向的資料會發生改變,但還是原來的那個物件
StringBuilder sb = new StringBuilder("abc");
void change(StringBuilder str) {
str.append("def");
}
change(sb);
System.out.println(sb);//sb被改變了,變成了"abcdef",
試圖new一個新的物件,但是傳遞的地址值的拷貝,原來的還是不會變
StringBuilder sb = new StringBuilder("abc");
void change(StringBuilder str) {
str = new StringBuilder("def");//方法結束后,堆疊指向堆空間新的物件參考就沒了,白new了
}
change(sb);
System.out.println(sb);//abc
陣列也是參考型別,元素值會改變
public class Example{
String str=new String("tarena");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.println(ex.str);//tarena
System.out.println(ex.ch);//gbc
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/168040.html
標籤:Java
上一篇:網路協議入門
下一篇:PHP組態檔說明
