public class modifyALelements {
public static void main(String[] args) {
StringBuilder myArr [] = {new StringBuilder("One"), new StringBuilder("Two")};
for (StringBuilder val: myArr)
System.out.println(val);
for (StringBuilder val: myArr)
val.append("Way");
for (StringBuilder val: myArr)
System.out.println(val);
StringBuilder anotherArr[] = { new StringBuilder("Java"), new StringBuilder("Loop") };
for (StringBuilder element : anotherArr)
System.out.println(element);
for (StringBuilder element : anotherArr)
element = new StringBuilder("Test");
for (StringBuilder element : anotherArr)
System.out.println(element);
}
}
输出:
One
Two
OneWay
TwoWay
Java
Loop
Java
Loop
大家好,有人能解释一下为什么每个循环的anotherArr的值没有改为Test last两个吗。当您使用append((方法时,会应用更改,例如OneWay和TwoWay。非常感谢。
在java中,类类型是引用类型。这意味着StringBuilder
类型的变量将包含对StringBuilder
对象的引用。
for (StringBuilder val: myArr)
val.append("Way");
这里我们参考myArr
。然后我们调用方法append
,它将更改引用的对象。
for (StringBuilder element : anotherArr)
element = new StringBuilder("Test");
这里我们还从一个数组中获取一个引用。然而,然后我们重新分配一个变量。这只会更改element
变量所指的内容。实际上不会更改任何对象。