好的,我正在努力做出这个简单的事情,但它不起作用。我是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");
}
}
}
答案 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