我知道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中的情况。

最佳答案

toUpperCase不会更改字符串,它会返回一个新的大写字符串。

10-07 19:32
查看更多