增强的 for 循环和数组

Enhanced for loop and Array

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 的值没有更改为测试最后两个 for-each 循环。当您使用 append() 方法时,会应用更改,例如单向和双向。 非常感谢。

在java中,class类型是引用类型。这意味着 StringBuilder 类型的变量将保存 StringBuilder 对象的引用

for (StringBuilder val: myArr)
    val.append("Way");

这里我们引用了myArr。然后我们调用方法append,它改变引用的对象。

for (StringBuilder element : anotherArr)
    element = new StringBuilder("Test");

这里我们也从一个数组中获取一个引用。但是,然后我们重新分配一个变量。这只会改变 element 变量所指的内容。实际上没有对象发生变化。