2012-04-29 35 views
4

好吧我試圖做這個簡單的事情,但它不會工作。我是一名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"); 
     } 
    } 
} 
+0

歡迎SO。你可能可以通過搜索找到答案,但是因爲你是初學者,所以很難知道要搜索什麼。我給你+1,因爲你的問題的_form_對於SO來說是完美的。你可以閱讀[faq]和[ask],或者已經知道如何制定問題:-) – 2012-04-29 05:03:54

+0

它是'Java'中的基礎,你可以找到非常簡單的網頁來解釋它(儘管我沒有投票) – MJM 2012-04-29 05:04:29

+0

不要忘記upvote所有有用的答案,並通過單擊該答案的投票計數下的複選框「接受」您認爲最有用的答案。 – 2012-04-29 05:05:34

回答

6

那麼,首先,==是該語言的基本操作符。表達式的結果類型是一個布爾值。爲了比較布爾類型,它比較相同真值的操作數。爲了比較參考類型,它比較相同參考值的操作數(即參考相同的對象或都是空的)。對於數字類型,它比較相同整數值或等效浮點值的操作數。請參閱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"); 
    } 
3

在Java中,當你需要比較兩個對象爲平等(即,以確定它們是否具有相同的值),則必須使用equals()==運算符用於測試兩個對象是否相同,即:如果它們在內存中完全相同的對象。有了這個

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

:在你的代碼中,替換該

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

還要注意它的反轉比較("a"slctn之前)的順序是一個好主意,以防萬一slctn爲null 。

1

在java中匹配時任何對象==運算符將只匹配這兩個對象的參考。

如果我們把你的例子slctn ==「a」。說slctn在abc123有它的參考價值,你的另一個刺「a」將有不同的參考價值,因爲它不是同一個對象。

方法.equals檢查字符串對象中的字母,並匹配兩個字符串中字母的值。因此,如果你的對象slctn包含「A」,它將匹配字符串「a」

1

在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也是memroy中的差異引用。 爲了解決這個問題,你必須通過equals方法比較兩個對象。對於樣品

String s_1 = new String("Sample"); 
String s_2 = new String("Sample"); 

System.out.println(s_1.equals(s_2)); 

結果將是:

true