如果语句在Java中工作,则无法获得其他功能

时间:2012-04-29 04:49:59

标签: 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");
         }
     } 
 }

5 个答案:

答案 0 :(得分:6)

嗯,首先,==是该语言的基本操作符。表达式的结果类型是布尔值。为了比较布尔类型,它比较了相同真值的操作数。为了比较引用类型,它比较相同参考值的操作数(即,引用相同的对象或都是null)。对于数字类型,它会比较相同整数值或等效浮点值的操作数。请参阅Java Language Specification

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

对于大多数人来说,典型的“陷阱”是使用==来比较两个字符串,当他们确实应该使用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");
     }

答案 1 :(得分:3)

slctn.equals("a")将有效。

阅读本文以了解原因:What is difference between == and equals() in java?

答案 2 :(得分:3)

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

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

有了这个:

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

另请注意,最好颠倒比较顺序("a"之前slctn),以防slctn为空。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分: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