奇怪的if-then行为在Java中

时间:2012-12-13 13:06:31

标签: java

  

可能重复:
  How do I compare strings in Java?

我有这段代码:

    System.out.println(staff.getEmail().length());
    System.out.println(staff.getEmailList());
    if ((staff.getEmail().length() > 0) && (staff.getEmailList() == "Y")) {
        System.out.println(staff.getEmail());

这是我的eclipse控制台上的输出:

12
Y

我的问题是,即使满足if语句中的两个条件,我的程序也永远无法到达上面的最后一行代码(System.out.println(staff.getEmail()))。我也没有任何错误。

任何想法我可能做错了什么?谢谢:))

3 个答案:

答案 0 :(得分:7)

你应该使用String.equals()而不是operator ==来实现java中的字符串相等。

staff.getEmailList() == "Y"应转换为"Y".equals(staff.getEmailList())

原因是operator==检查身份。如果两个操作数是同一个对象(引用同一个对象),而equals()检查相等 - 如果两个操作数相等。

答案 1 :(得分:0)

这里你不是实际比较字符串值,而是它们的引用(用C语言指针)。

(staff.getEmailList() == "Y")

你应该这样做

(staff.getEmailList().equals("Y"))

答案 2 :(得分:0)

当你进行比较staff.getEmailList() == "Y"时,你会问这两个字符串是否是相同的String个实例,而不是它们是否具有相同的值。你应该staff.getEmailList().equals("Y")来代替。