2013-10-19 34 views
-1

我寫了一個應該支持英文和德文的Java程序。如果設置了一個參數,並且如果它等於「英語」或「英語」,它應該調用一種方法來執行英文版本,如果沒有參數或者它不等於「英文」或「英文」德文版的方法。 但是,無論我的參數是什麼,(args [0] ==「english」|| args [0] ==「English」)都是錯誤的,即使它是真實的,我也不明白爲什麼是這樣。爲什麼某個布爾值爲false雖然它應該是真的?

這裏是主要的方法,其他的不重要,所以我會離開它們。

public static void main(String[] args){ 
boolean input=args.length==1; 
System.out.println(input); 
boolean mode = false; 
if (input) mode=args[0]=="English"||args[0]=="english"; 
System.out.println(mode); 
if(input&&mode) english(); 
else german(); 
} 

有沒有人有一個線索,爲什麼它不會是真的,不管我的參數?

+0

println的調用是不必要的,我只是把它們放在那裏找出爲什麼英語方法不會被調用。 – Exabytez

+0

這很可能在任何Java常見問題中解釋。不要與字符串== –

+0

比較這個問題有一個額外的維度沒有被[如何比較Java中的字符串](http://stackoverflow.com/questions/513832):locales覆蓋。對於自然語言比較,應使用整理API。 – McDowell

回答

3

使用equals()方法進行字符串值比較。

args[0].equals("English")||args[0].equals("english") 

或者甚至更好(在這種情況下)

args[0].equalsIgnoreCase("English") 

==爲對象引用的比較。不要用它來比較值。

0

不應該將字符串與==進行比較,而應使用equals方法。 使用

args[0].equalsIgnoreCase("English") 

它會比較兩個, 「英語」 和 「英語」。

更好的版本是

"English".equalsIgnoreCase(args[0]); 

這將確保,如果ARGS [0]爲空,即在你的情況下,沒有爭論,也不會拋出NPE。

說明:因爲在Java中,==比較不存在值的對象,即如果兩個引用持有相同的對象。對象內容與Object類的equals方法進行比較,該類將被String類覆蓋。

0

由於Java機器比較指向字符串對象的指針,因此無法以此方式比較Java中的字符串。爲了使正確的同情使用功能equals

if("english".equalsIgnoreCase(args[0])) { 
    // English language 
} 
相關問題