如果使用Java语句,则无法获得其他语句

The*_*des 4 java if-statement

好吧,我正在努力做出这个简单的事情,但它不会起作用.我是Java的初学者,想要一些帮助.每次我运行下面的代码,我得到输出,这不是一个有效的选项.我究竟做错了什么?

 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");
         }
     } 
 }
Run Code Online (Sandbox Code Playgroud)

Sub*_*der 6

好吧,首先,==是该语言的基本操作符.表达式的结果类型是布尔值.为了比较布尔类型,它比较了相同真值的操作数.为了比较引用类型,它比较相同参考值的操作数(即,引用相同的对象或都是null).对于数字类型,它会比较相同整数值或等效浮点值的操作数.请参阅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");
     }
Run Code Online (Sandbox Code Playgroud)