String.equals with each和for循环

时间:2015-07-13 23:34:07

标签: java for-loop foreach

String[] rgb = new String[3];

rgb[0] = Integer.toHexString(color.getRed());
rgb[1] = Integer.toHexString(color.getGreen());
rgb[2] = Integer.toHexString(color.getBlue());

for(String el : rgb)
{
    if(el.equals("0"))
    {
        el = "00";
    }
}

for(int i = 0; i<3; i++)
{
    if(rgb[i].equals("0"))
    {
        rgb[i] = "00";
    }
}

在上面的代码中,我根据天气评估每个指数,每个指数= = 0。 但它总是在foreach循环中运行false,并且在for循环中适当时为true。 有人可以解释幕后发生的事情,以实现这一目标吗?

我没有按顺序运行它们,它们都用于演示目的。

1 个答案:

答案 0 :(得分:8)

for-each循环中,字符串el实际上不是对数组rgb的引用。它只保存数组中给定索引的值。因此,在这种情况下,您必须使用普通的for循环来修改数组的内容;否则el的内容只会在循环的每次迭代中被覆盖。

直观的解释:

String[] i = new String[]{"Hi", "Hello"};     <------- Contains two indexes.
for(String str : i){
    str = str + "!";
}

第一次迭代:

  • str设置为i[0],其值为"Hi"
  • str设置为str + "!",将str更改为"Hi!"
  • 牙套的末端; str被丢弃

第二次迭代:

  • str设置为i[1],其值为"Hello"
  • str设置为str + "!",将str更改为"Hello!"
  • for循环结束; str被丢弃

i的值在任何情况下都不会发生变化,因为str的值是对字符串的单独引用。

有关不变性this SO post)的概念,请参阅Wikipedia