簡體   English   中英

如果使用Java語句,則無法獲得其他語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM