【问题标题】:Enhanced for loop and Array增强的 for 循环和数组
【发布时间】:2020-11-22 03:38:59
【问题描述】:
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 two for-each 循环。当您使用 append() 方法时,将应用更改,例如单向和双向。 非常感谢。

【问题讨论】:

    标签: java string loops arraylist builder


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-31
      • 2012-03-20
      • 1970-01-01
      • 2014-02-23
      • 2013-06-14
      • 2011-05-24
      • 2011-01-20
      相关资源
      最近更新 更多