【问题标题】:String.equals with for each and for loop [duplicate]String.equals with for each 和 for 循环[重复]
【发布时间】:2015-10-02 10:01:11
【问题描述】:
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";
    }
}

在上面的代码中,我根据天气评估每个指数,或者不是每个指数都 = 为零。 但它总是在 foreach 循环中运行为假,在 for 循环中适当时运行为真。 有人可以解释幕后发生的事情吗?

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

【问题讨论】:

  • 它不会在 foreach 循环中“运行错误” - 当您提出问题时,请确保检查您所做的断言,通常这样做会让您自己回答问题。跨度>
  • @Shahzeb color 是一个包含 java.awt.Color 类型的变量
  • @pvg 对,退后一步质疑你的假设总是好的,谢谢你的提醒!

标签: java for-loop foreach


【解决方案1】:

在您的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) 的概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2014-03-15
    • 2014-03-24
    • 2012-02-09
    • 2012-10-11
    相关资源
    最近更新 更多