String.equals with each和for循环

gna*_*nja 2 java foreach for-loop

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我根据天气评估每个索引,每个索引都是=零.但它总是在foreach循环中运行false,并且在for循环中适当时为true.谁能解释幕后发生的事情才能实现这一目标?

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

jfd*_*ing 8

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

一个直观的解释:

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

第一次迭代:

  • str设置为i[0],其值为"Hi"
  • str设置为str + "!",更改str"Hi!"
  • 大括号; str被丢弃了

第二次迭代:

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

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

请参阅此SO帖子关于不变性的概念(维基百科).