java - 使用 JOptionPane 的 Java 的 If Else 语句

标签 java swing if-statement equals joptionpane

我是编程新手,正在学习 Java。我正在尝试使用 JOptionPane 来处理 if/else 语句。除了声明之外,一切正常。我只得到一句话“停下来加油!”无论输入什么答案(是或否)。

如有任何帮助,我们将不胜感激!

//This program determine if I have to stop for gas on the way in to work. 

import javax.swing.JOptionPane;
import java.util.*;

public class GasIndicator
{

     public static void main(String[] args)
     {
          String answer;
          String outputStr1;
          String outputStr2;

     answer =            
          JOptionPane.showInputDialog ( "Do you have at least an eighth tank of gas? yes or no " );



          outputStr1 = "You can drive straight to work";
          outputStr2 = "Stop and get gas!";

          if (answer == "yes")

              JOptionPane.showMessageDialog(null, outputStr1, "Gas", JOptionPane.INFORMATION_MESSAGE);


          else 
              JOptionPane.showMessageDialog(null, outputStr2, "Gas", JOptionPane.INFORMATION_MESSAGE);


         System.exit(0);            


     }
}

最佳答案

if (answer == "yes")

比较String对象时,需要使用equals方法。

示例

if(answer.equals("yes")) {
    // Do code.
}

注意:根据评论的建议,按如下方式构造 if 语句会更安全:

if("yes".equals(answer)) {
    // Do code.
}

这不会通过 NullPointerException 导致 answer 等于 null

说明

在 Java 中,当使用 == 运算符比较 Object 类型的子类时,它将检查这两个对象是否是对同一个对象的引用。他们不检查该对象的。由于您要比较值,因此需要使用 equals 方法。

它如何应用于您的代码

嗯,让我们看看吧。您可以从 InputDialog 的响应中获取 String 类型。所以这是一个String。然后,您尝试将其与“yes”进行比较。这就是所谓的字符串文字,因此这意味着在两个、即两个不同对象中创建一个对象。

请记住,对于对象而言,您正在比较引用类型;不是对象值,所以这就是为什么它总是导致 false

关于java - 使用 JOptionPane 的 Java 的 If Else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21416886/

相关文章:

java - 根据以前的数据创建组

java - 是否可以覆盖自定义 ImageView?

java - 当最小化或调整 JFrame 大小时,由线程调整大小的 JPanel 会获取其默认大小

java - 返回数组的剩余值

java - Java初学者,在最后一个if-else语句中,我只是无法弄清楚 "but not both "部分

bash - tcsh 中的 IF 语句错误

java - 有 JDK 和 JRE8 但仍然无法使用带有字符串的 switch

java - 计算对象而不产生太多垃圾

Java按钮反转

java - 确定调用事件处理程序的对象