为什么最后的JOptionPane消息没有显示?

时间:2019-06-23 12:03:43

标签: java swing joptionpane

import javax.swing.JOptionPane;

public class Example {
    public static void main(String[] args) {
        String colour = JOptionPane.showInputDialog("What's your favourite colour?");
        int shade = Integer.parseInt(JOptionPane.showInputDialog("From a scale of 1-10, 10 being the darkest and 1 being the lightest, what shade do you like?"));
        String response = "";

        if (colour == "Red") { 
            if (shade < 5)
                response = "Light Red";
                else 
                    response = "Dark Red";
            JOptionPane.showMessageDialog(null, "Your colour is " + response);
        }
    }
}

为什么最后的JOptionPane消息没有显示?例如,用户输入“红色”,然后输入“ 1”,则响应未显示为“浅红色”。

1 个答案:

答案 0 :(得分:1)

最可能的解释是您的代码流从未进入显示消息对话框的父if块。正如您对问题的评论所述,这很可能是由于您正在使用==运算符而不是equals(String)方法比较两个字符串。阅读here,了解有关这两种比较字符串的方式之间的区别的更多信息。

这是上面链接的答案的简短摘要:

  

equals()方法比较String实例(在堆上)内部的“值”,而不管两个对象引用是否引用相同的String实例。

     

“ ==”运算符比较两个对象引用的值,以查看它们是否引用相同的String实例。

这是您的代码的外观:

String response = "Unknown";

if (colour.equals("Red")) {
    response = shade < 5 ? "Light Red" : "Dark Red";
}
JOptionPane.showMessageDialog(null, "Your colour is " + response);

请注意,我在缩短对response字段的新值赋值方面有一些自由(因为这应该使其更紧凑和易读),并将showMessageDialog方法移到了if块(如@CarlosHeuberger所建议的),以便即使用户选择的颜色不是红色时也提供一条消息。