java中String型別引數傳遞問題
阿新 • • 發佈:2019-01-28
先看程式碼:
public class Test1 {
public static void main(String[] args) {
String str = new String("string型別傳遞:");
StringBuffer sb = new StringBuffer("stringbuffer傳遞:");
change(str, sb);
System.out.println(str);
System.out.println(sb);
}
static void change(String str,StringBuffer sb)
{
str = "str";
sb.append("stringbuffer");
}
}
程式碼執行結果:
string型別傳遞:
stringbuffer傳遞:stringbuffer
String 和StringBuffer傳遞的都是引用性變數,不同的是String類是final不可變類,當str變數(即string物件的儲存地址)的副本傳遞到chang方法時,按道理來說,修改此副本中的物件內容即會修改原str變數中對應的內容,但是因為string類的不可變性,當修改副本中的內容時,jvm會新一塊記憶體區域,並且記憶體中的內容為“str”,原str變數對應的記憶體塊內容沒有發生變化。