我是编程的新手 - 我正在学习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);
}
}
答案 0 :(得分:8)
if (answer == "yes")
比较String
个对象时,您需要使用equals
方法。
示例
if(answer.equals("yes")) {
// Do code.
}
注意 :根据评论的建议,构建if
语句更安全,如下所示:
if("yes".equals(answer)) {
// Do code.
}
这不会NullPointerException
answer
等于null
。
解释
在Java中,当使用==
运算符来比较类型Object
的子类时,它将检查这两个对象是否是对同一对象的引用。他们不检查该对象的值。因为您要比较值,所以需要使用equals
方法。
它如何适用于您的代码
好吧,让我们来看看吧。您从String
的回复中获得InputDialog
类型。所以这是一个String
。然后,您尝试将其与"yes"
进行比较。这就是所谓的String literal
,所以这意味着在那里创建了一个对象,因此有两个不同的对象。
请记住,在对象的情况下,您要比较引用类型;不是对象值,所以它总是导致false
。
答案 1 :(得分:3)
您必须将字符串与.equals(...)
if("yes".equals(answer))
使用==
将比较.equals(...)
比较值的引用。
如果要比较对象(您创建的类或Java的一部分,例如String
),您应该使用.equals(...)
(除非您有意想要比较引用)。当您比较原始数据类型(例如int
,double
,char
等)时,您应该使用==
。
答案 2 :(得分:1)
您遇到了有关Java中字符串比较的常见问题。将字符串与'=='进行比较将不会达到预期效果 - 而是使用String类中的'.equals()':
if (answer.equals("yes"))
您通常应该确保检查null,因为对null变量执行.equals()会导致崩溃。一般来说,你真的希望你的条件看起来像这样:
if (answer != null && answer.equals("yes"))