[英]Can't get else if statement to work in Java
好吧,我正在努力做出這個簡單的事情,但它不會起作用。 我是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");
}
}
}
好吧,首先,==是該語言的基本操作符。 表達式的結果類型是布爾值。 為了比較布爾類型,它比較了相同真值的操作數。 為了比較引用類型,它比較相同參考值的操作數(即,引用相同的對象或都是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");
}
slctn.equals("a")
將起作用。
閱讀本文以了解原因: java中==和equals()之間的區別是什么?
在Java中,當您需要比較兩個對象是否相等 (即,確定它們是否具有相同的值)時,必須使用equals()
。 ==
運算符用於測試兩個對象是否相同 ,即:如果它們與內存中的對象完全相同。 在您的代碼中,替換為:
slctn == "a"
slctn == "b"
有了這個:
"a".equals(slctn)
"b".equals(slctn)
另請注意,反轉比較順序( slctn
之前的"a"
)是個好主意,以防slctn
為空。
在java中匹配任何對象時,==運算符只匹配這兩個對象的引用。
如果我們以你的例子slctn ==“a”為例。 假設slctn的參考值在abc123,你的另一個sting“a”會有不同的參考值,因為它不是同一個對象。
方法.equals檢查字符串對象中的字母是什么,並匹配兩個字符串中字母的值。 因此,如果您的對象slctn包含“a”,它將與字符串“a”匹配
在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.