当前位置:  开发笔记 > 编程语言 > 正文

了解Java中的每个循环

如何解决《了解Java中的每个循环》经验,为你挑选了2个好方法。

下面的代码没有达到我的预期.执行此代码后,每个字符串都为null.

String[] currentState = new String[answer.length()];
for(String x : currentState)
{
    x = "_";
}

下面的代码完成了我的期望.currentState中的每个字符串现在都是"_"

String[] currentState = new String[answer.length()];
for (int i = 0; i < currentState.length; i++) {
    currentState[i] = "_";
}

有人可以解释为什么第一个案例不起作用?



1> John Leidegr..:

通过设计,对于每个变量'x'(在这种情况下)并不意味着分配.我很惊讶它甚至编译得很好.

String[] currentState = new String[answer.length()]; 
for (String x : currentState) { 
    x = "_"; // x is not a reference to some element of currentState 
}

以下代码可能会显示您正在执行的操作.请注意,这不是枚举的工作原理,但它举例说明了为什么不能指定'x'.它是位于'i'的元素的副本.(编辑:请注意,元素是引用类型,因此它是该引用的副本,对该副本的赋值不会更新相同的内存位置,即位置"i"处的元素)

String[] currentState = new String[answer.length()]; 
for (int i = 0; i < answer.length(); i++) { 
    String x = currentState[i];
    x = "_";
}



2> TofuBeer..:

原始代码:

String currentState = new String[answer.length()];

for(String x : currentState) 
{ 
    x = "_"; 
}

重写代码:

String currentState = new String[answer.length()];

for(int i = 0; i < currentState.length; i++) 
{ 
    String x;

    x = currentState[i];
    x = "_"; 
}

我将如何编写代码:

String currentState = new String[answer.length()];

for(final String x : currentState) 
{ 
    x = "_";   // compiler error
}

用错误重写代码:

String currentState = new String[answer.length()];

for(int i = 0; i < currentState.length; i++) 
{ 
    final String x;

    x = currentState[i];
    x = "_";   // compiler error
}

当你做这样的事情时,使变量最终成为亮点(这是一个常见的初学者错误).尝试将所有变量设为final(实例,类,参数,catch中的异常等等) - 只有在真正需要更改它们时才使它们成为非final.您应该会发现90%-95%的变量是最终变量(初学者在开始这样做时会结束20%-50%).

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有