对于奇怪的行为的解释

时间:2013-06-02 18:43:28

标签: java arrays file

所以我运行了这段代码

        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语句不起作用,我查看了de bugger并且它表示当时aLine[i]的值是“0”。我不明白这种奇怪的行为。这是为什么?

5 个答案:

答案 0 :(得分:3)

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

==检查对象,equals比较值

答案 1 :(得分:3)

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

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

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

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

为什么?

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

答案 2 :(得分:0)

使用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");

            }

        }

现在应该可以了。

答案 3 :(得分:0)

正如其他人所说,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");
    }
}

答案 4 :(得分:0)

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

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