我想問一個非常簡單的問題。我只是將一個String對象傳遞給一個函數,但結果很奇怪。我認爲,因爲我傳遞了一個對象(通過引用),結果應該是「Here」而不是「Hello」。這是爲什麼發生?將字符串傳遞給函數
public class MainStr
{
/**
* @param args
*/
public static void main(String[] args)
{
String str = "Hello!";
System.out.println(str);
changeString(str);
System.out.println(str);
}
static void changeString(String str)
{
str=" HERE";
}
}
謝謝。
編輯:
public class MainStr
{
String str;
/**
* @param args
*/
public static void main(String[] args)
{
MainStr ms = new MainStr();
ms.str = "Hello!";
System.out.println(ms.str);
changeString(ms);
System.out.println(ms.str);
}
static void changeString(MainStr ms)
{
ms.str=" HERE";
}
}
如果是這樣的話,那麼爲什麼如果我通過它的包裝對象內部的工作?包裝對象,它不是通過引用?
PS:爲什麼這樣工作?字符串是一個對象。爲什麼我需要另一個包裝對象來更改對象!如果我想通過引用傳遞某些東西會怎麼樣?那可能嗎?
Java正在處理所有複雜類型的引用。字符串和所有使用的定義類型都由引用表示。你可以把引用看作一個你無法訪問的C++指針。 – 2012-02-07 21:14:54
@salamis Remeber Java永遠是傳值!形式參數(這是方法changeString中的str)只是指向內存位置的引用的副本,其中「Hello!」是。因此,當您現在指定「HERE」而不是指向「Hello!」時指向「這裏」,而原始的不變。 「HERE」將被垃圾收集。 – MalsR 2012-02-07 21:22:02