如果和Switch相同的任务,结果不一样?

时间:2015-08-14 23:46:42

标签: java if-statement switch-statement

我有一个开关和一个if语句,它们是等价的。他们应该采取一个字符串,如果是的话做一些事情,如果没有做另一件事。无论输入什么,if语句都不会执行任何操作,但switch语句会执行此操作。那是为什么?

这是if语句:

if (yes.equals("yes")){
    System.out.println ("Enter your first number");
    fnum = x.nextDouble();
    System.out.println ("Enter your second number");
    snum = x.nextDouble();
    calculations(fnum, snum);
}
if (yes.equals("No")) {
    System.out.println("okay, bye then!");
}

这是开关:

switch (yesno){
    case "yes":  
        System.out.println ("Enter your first number");
        fnum = x.nextDouble();
        System.out.println ("Enter your second number");
        snum = x.nextDouble();
        calculations(fnum, snum);
        break;
    case "no":
        System.out.println("k bye");

这不是重复,因为问题出在if语句中。我的交换机已被标记为重复。

1 个答案:

答案 0 :(得分:2)

  

我有一个开关和一个if语句,它们是等价的。

实际上,它们不等同于:

  • if版本正在检查"yes""No"。但检查"yes""no"的切换版本。由于检查在两种情况下都区分大小写,因此如果输入为"no" ...或"No",则会得到不同的结果。

  • 这两个版本检查不同的变量;即yesyesno。这可能会有所不同,具体取决于具体情况。

这些中的任何一个都可以解释您所看到的不同行为。

  

我认为是,并且肯定是平等的,但他们不是......?知道为什么吗?

嗯,显然名称不同,因此它们不能是相同的变量。

然而,它们是不同变量的事实并不一定意味着它们具有不同的决定了代码的行为。

当然,如果yesno包含正确的"yes""no"值且yes包含其他内容(例如""),则会给出你正在观察的行为。 (显然这是一个假设的诊断。如果你想要一个更具体的答案,请告诉我们相关的代码。)