【问题标题】:Explanation for Strange if behavior [duplicate]如果行为奇怪的解释[重复]
【发布时间】:2013-05-28 23:21:49
【问题描述】:

所以我运行了这段代码

        String line = worldRead.readLine();

        String[] aLine = line.split("");

        for (int i = 0; i < aLine.length; i++){

            System.out.println(aLine[i]);

            if(aLine[i] == "0"){

                System.out.println("Its an 0");

            }

        }

它会打印文件的第一行,因为它应该一个字符一个字符,但是 if 语句不起作用,我查看了调试器,它说当时 aLine[i] 的值是“ 0”。我不明白这种奇怪的行为。这是为什么呢?

【问题讨论】:

    标签: java arrays file


    【解决方案1】:

    使用if(aLine[i].equals("0"))

    == 检查对象,而equals 比较值

    【讨论】:

      【解决方案2】:
       if(aLine[i] == "0"){
      
           System.out.println("Its an 0");
       }
      

      永远不要将字符串与== 进行比较。使用equals 方法。

       if(aLine[i].equals("0"){
           System.out.println("Its an 0");
       }
      

      为什么?

      好吧,使用== 操作符实际上会检查这两个对象是否是相同的 对象。您正在测试的是这些对象中的值。

      【讨论】:

      • +1 以获得更好的解释
      【解决方案3】:

      使用equals方法进行字符串比较。

      == 不会比较字符串对象的字符串值,它只是检查引用是否相等。

      在这方面,如果您比较两个具有相同值的字符串对象,则 == 运算符不相等。

      String line = worldRead.readLine();
      
              String[] aLine = line.split("");
      
              for (int i = 0; i < aLine.length; i++){
      
                  System.out.println(aLine[i]);
      
                  if(aLine[i].equals("0")){
      
                      System.out.println("Its an 0");
      
                  }
      
              }
      

      它现在应该可以工作了。

      【讨论】:

        【解决方案4】:

        正如其他人所说,Java 中的字符串比较应该使用.equals() 而不是==。后者仅检查对象身份,Java 中的两个 String 对象可以具有相同的值而不是相同的对象。在这种情况下,由于您的字符串保证为一个字符,您可以使用== 比较字符。您还可以使用增强的for 循环稍微简化您的代码:

        String line = worldRead.readLine();
        for (String s : line.split("")){
            System.out.println(s);
            if (s.charAt(0) == '0') {  // or s.equals("0")
                System.out.println("Its an 0");
            }
        }
        

        【讨论】:

          【解决方案5】:

          正如 StinePike 上面所说,使用 equals() 代替 ==

          两个字符串对象不相同,但相等!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多