我知道java是按值傳遞的,就這樣。但是,我仍然無法弄清楚這一點。public static void changeTheName(String obj){
obj.toUpperCase();
}這個方法不會影響原來的字符串對象,還算可以理解。因為字符串是不可變的,并且字符串文字的變化意味著引用變量現在將引用新對象,而舊對象將留給垃圾收集器。但是當我傳遞字符串數組時,我可以更改字符串文字,這意味著我可以更改引用。為什么數組會發生這種情況,因為如果我們這樣做 obj[]= new String[]{} 它不會影響原始數組,原始數組仍然引用舊數組,這類似于直接更改字符串文字public static void ChangeTheName(String obj[]){
for(int i=0;i<obj.length();i++) obj[i]=obj[i].toUpperCase;
}編輯: 我正在尋找的答案是 obj 和 obj[0] 的引用是唯一的,這就是為什么第二種方法能夠更改數組的整個內容。因為我來自 C 背景,所以我認為 obj 和 obj[0] 具有相同的引用,但 java 中的情況肯定不是這樣。
3 回答

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
toUpperCase() 不會更改字符串。它返回一個新的大寫字符串。
但據我了解,您想知道為什么對象值在方法中發生變化而不是預先數據類型值?
盡管 Java 是嚴格按值傳遞的,但是傳遞基本類型還是引用類型的精確效果是不同的。
.
當我們將基本類型傳遞給方法時,它是按值傳遞的。但是,當我們將對象傳遞給方法時,情況會發生巨大變化,因為對象是通過有效的引用調用來傳遞的。Java 做了一件有趣的事情,它是按值傳遞和按引用傳遞之間的混合體?;旧希瘮挡荒芨膮?,但函數可以通過調用其中的某些方法來要求參數更改自身。
在創建類類型的變量時,我們僅創建對對象的引用。因此,當我們將此引用傳遞給方法時,接收它的參數將引用與參數引用的同一對象。
這實際上意味著對象的行為就像通過引用調用將它們傳遞給方法一樣。
對方法內部對象的更改確實會反映在用作參數的對象中。

波斯汪
TA貢獻1811條經驗 獲得超4個贊
如果你像下面這樣做只會改變值。
public static void(String obj[]){
for(String s:obj) {
s=s.toUpperCase();
}
}
我認為因此做出改變。
添加回答
舉報
0/150
提交
取消