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。 有人可以解释幕后发生的事情,以实现这一目标吗?
我没有按顺序运行它们,它们都用于演示目的。
答案 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。