4

好的,我正在尝试做这个简单的事情,但它不起作用。我是 Java 初学者,需要一些帮助。每次我运行下面的代码时,我都会得到输出That is not a valid option。我究竟做错了什么?

 package test;

 import java.util.Scanner;

 public class options {
     public void options() {
         Scanner scnr = new Scanner(System.in);
         String slctn;

         System.out.println("What would you like to do?");
         System.out.println("a) Travel the expedition");
         System.out.println("b) Learn more about the expedition");

         slctn = scnr.nextLine();
         if (slctn == "a"){
             travel exeTravel = new travel();
             exeTravel.travel();
         }else if (slctn=="b"){
             learn exeLearn = new learn();
             exeLearn.learn();
         }else{
             System.out.println("That is not a valid option");
         }
     } 
 }
4

5 回答 5

6

好吧,首先,== 是语言中的基本运算符。表达式的结果类型是布尔值。为了比较布尔类型,它比较相同真值的操作数。对于比较引用类型,它比较相同引用值的操作数(即,引用同一个对象或都为空)。对于数字类型,它比较相同整数值或等效浮点值的操作数。请参阅Java 语言规范

相反,equals() 是一个实例方法,它基本上由 java.lang.Object 类定义。按照惯例,此方法指示接收器对象是否“等于”传入的对象。Object 类中此方法的基本实现检查引用是否相等。其他类,包括您编写的类,可能会覆盖此方法以执行更专业的等价测试。请参阅Java 语言规范

对于大多数人来说,典型的“陷阱”是在他们真正应该使用 String 类的 equals() 方法时使用 == 来比较两个字符串。从上面可以看出,只有当两个引用都指向同一个实际对象时,运算符才会返回“true”。但是,对于字符串,大多数用户想知道两个字符串的值是否相同——因为两个不同的 String 对象可能都具有相同(或不同)的值。

     slctn = scnr.nextLine();
     if (slctn.equals("a")){
         travel exeTravel = new travel();
         exeTravel.travel();
     }else if (slctn.equals("b")){
         learn exeLearn = new learn();
         exeLearn.learn();
     }else{
         System.out.println("That is not a valid option");
     }
于 2012-04-29T04:58:15.363 回答
3

slctn.equals("a")将工作。

阅读本文以了解原因: Java 中 == 和 equals() 有什么区别?

于 2012-04-29T04:51:19.410 回答
3

在 Java 中,当您需要比较两个对象是否相等(即确定它们是否具有相同的值)时,您必须使用equals(). 该==运算符用于测试两个对象是否相同,即:它们是否在内存中完全相同。在您的代码中,将其替换为:

slctn == "a"
slctn == "b"

有了这个:

"a".equals(slctn)
"b".equals(slctn)

另请注意,最好颠倒比较的顺序("a"before slctn),以防万一slctn为空。

于 2012-04-29T04:58:08.203 回答
1

在 java 中,当匹配任何对象时,== 运算符只会匹配这两个对象的引用。

如果我们以你的例子 slctn == "a"。假设 slctn 在 abc123 有其参考值,您的其他 sting "a" 将具有不同的参考值,因为它不是同一个对象。

.equals 方法检查字符串对象中的字母是什么,并匹配两个字符串中字母的值。因此,如果您的对象 slctn 包含“a”,它将与字符串“a”匹配

于 2012-04-29T05:00:11.597 回答
0

在 java==运算符中比较两个对象的引用,例如:

String s_1 = new String("Sample");
String s_2 = new String("Sample");

System.out.println(s_1 == s_2);

结果将是:

false

发生这种情况是因为 s_1 是内存中的引用,而 s_2 也是内存中的差异引用。为了解决这个问题,你必须按equals方法比较两个对象。样品

String s_1 = new String("Sample");
String s_2 = new String("Sample");

System.out.println(s_1.equals(s_2));

结果将是:

true

于 2012-04-29T05:02:15.433 回答