Java 中的引數傳遞
阿新 • • 發佈:2018-11-26
Java 中的引數傳遞方式是傳遞值, 也稱為”值傳遞”。 當引數變元是一個簡單型別時,值傳遞意味著這個方法不能改變引數變元的值,即方法中變數所做的改變在方法外都是不可見的,也可以說不起作用; 當引數變元是一個引用型別時, 值傳遞意味著這個方法不能改動這個物件的引用,但是方法可以呼叫該物件的方法來修改該物件中可訪問的變數。
示例
public class StringTester {
public static void changeString(String s, StringBuffer sb) {
s += " by Definition" ;
sb.append(" by Definition");
}
public static void main(String args[]) {
String string = new String("Java");
StringBuffer buffer = new StringBuffer("java");
changeString(string, buffer);
System.out.println("String after method call: " + string);
System.out.println("StringBuffer after method call: " + buffer);
}
}
輸出
說明
在方法changeStrings中,字串”by Definition” 和 s 拼接起來後,產生一新字串”Java by Definition”。於是變數s指向這個新字串,這是由String類的性質決定的, 即要改變一個String物件的值,就是建立一個新的字串賦給它,但是這種改變只是發生在方法內部,在方法外是不可見的,這是由”值傳遞”的性質決定的。
另一方面,變數sb使用append方法修改了所指向資料的內容,”by Definition” 被加入其後,但是sb這個引用的值並未發生改變,因為sb和buffer仍然指向原來的地址,而它們指向的物件的值的改變是方法外可見的。