java中的对象数组有什么用?

我知道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 中的情况肯定不是这样。


qq_花开花谢_0
浏览 86回答 3
3回答

米琪卡哇伊

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

料青山看我应如是

&nbsp;toUpperCase() 不会更改字符串。它返回一个新的大写字符串。但据我了解,您想知道为什么对象值在方法中发生变化而不是预先数据类型值?尽管 Java 是严格按值传递的,但是传递基本类型还是引用类型的精确效果是不同的。.当我们将基本类型传递给方法时,它是按值传递的。但是,当我们将对象传递给方法时,情况会发生巨大变化,因为对象是通过有效的引用调用来传递的。Java 做了一件有趣的事情,它是按值传递和按引用传递之间的混合体。基本上,函数不能更改参数,但函数可以通过调用其中的某些方法来要求参数更改自身。在创建类类型的变量时,我们仅创建对对象的引用。因此,当我们将此引用传递给方法时,接收它的参数将引用与参数引用的同一对象。这实际上意味着对象的行为就像通过引用调用将它们传递给方法一样。对方法内部对象的更改确实会反映在用作参数的对象中。

波斯汪

如果你像下面这样做只会改变值。public static void(String obj[]){&nbsp;for(String s:obj) {&nbsp; &nbsp;s=s.toUpperCase();&nbsp; }}我认为因此做出改变。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java