我认为增强的for循环只是一些语法糖,其行为与“传统”for循环完全相同。我在下面编写了一些代码,表明情况并非如此。
产出不同的原因是什么?或者我错过了什么,我应该停止以这种方式编写代码?
为什么不引用temp [(当前索引)]?对我而言,不
是没有意义的String temp[] = { "foo:bar" };
for (String t : temp)
t = t.split(":", 2)[1];
System.out.println(temp[0].startsWith("foo")); //true
for (int t = 0; t < temp.length; t++)
temp[t] = temp[t].split(":", 2)[1];
System.out.println(temp[0].startsWith("foo")); //false
答案 0 :(得分:7)
foreach循环实际上等同于
for (int i = 0; i < temp.length; i++)
String t = temp[i];
t = t.split(":", 2)[1];
}
不会改变数组的任何元素。
答案 1 :(得分:3)
您没有使用这两个测试测试相同的字符串。
当您第一次执行测试时,字符串是(仍然)"foo:bar"
- 您的第一个循环不会更改字符串,它只会更改循环变量t
。
但这一行:
temp[t] = temp[t].split(":", 2)[1];
将字符串"foo:bar"
用冒号分隔后覆盖第二个元素,即"bar"
,它不以"foo"
开头。
答案 2 :(得分:0)
for (int t = 0; t < temp.length; t++)
{
temp[t] = temp[t].split(":", 2)[1];
System.out.println(temp[t]);
}
这会打印“bar”,这意味着在for
循环中覆盖了值“foo”。
所以,最终的结果是假的。