2012-06-23 64 views
1

我試過尋找這個問題的答案,但我不完全知道要搜索什麼。基本上我想要的是我的程序的用戶能夠輸入(進入命令行):需要幫助比較命令行參數與字符串文字在Java

java galaxySim HELP 

和我的計劃告訴他們有關文件格式和東西一些東西。否則,第一個參數是一個文件名。所以我必須這樣做的代碼是:

if (args[0] == "HELP") { 
    System.out.printf("Help Stuff..."); 
}else{ 
    filename = args[0]; 
    System.out.printf("Filename found"); 
} 

被封裝在錯誤處理的東西,我不認爲這會影響所以沒有寫。問題是這樣的:無論我輸入第一個參數,它總是轉到else語句。

我已經嘗試在參數前後添加空格,但它永遠不會有幫助。我不相信這是我的IF語句的問題,好像我寫

if(args[0] == args[0]){ 

然後它確實去正確的語句。看起來好像

args[0] == "Help" 

總是錯誤的。有沒有可能是某種編碼問題?我使用win7,如果這有所作爲。

這不是該計劃的重要組成部分,但是......如果它能夠工作,它將會很好。任何人都知道這裏有什麼問題?

謝謝!

+0

可能重複[我如何在Java中比較字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare- strings-in-java) – assylias

回答

4

比較使用equals

更改此String S:

if(args[0] == "HELP")

if(args[0].equals("HELP"))

==比較參考平等,不珍惜平等。您需要檢查這些值,因此請使用equals()

以下是link的更多信息。

您可能還需要閱讀this瞭解==equals()方法之間的區別。

+0

您不需要指向另一個站點:在[Java wiki的底部的Java常見問題解答]中有一個很好的答案(http://stackoverflow.com/tags/java/info )! – assylias

+1

@assylias對不起。我只是想提供一個很好的閱讀。從下次開始記住它。 :) –

+0

我指的是第二個鏈接「我如何比較Java中的字符串?」 ;-) – assylias

1

您需要將String實例與equals()進行比較,而不是將==equals()進行比較。

所以使用args[0].equals("Help")

當您使用==你正在檢查,看看他們是完全相同的對象(即你基本上是檢查是否在操作數都存儲在內存中的點是一樣的),而不是根據類的語義來檢查它們是否是等價的實例。

0

那麼,我們都知道字符串是對象,所以我們無法通過==來比較它們。在面向對象的上下文中,我們使用==運算符來檢查兩個引用是否指向同一個對象。因此,通過這一說法,

args[0] == "HELP" 

你告訴引用[0]和「HELP」字符串返回的引用是否指向同一對象或不指定參數時,他們不能肯定JVM。因爲用戶輸入的字符串和「HELP」字符串是完全不同的對象。

如果你想檢查兩個對象是字面上(或有意義的相等),你有equals()方法。

所以,最後,你應該寫的

args[0].equals("HELP")