2012-07-11 52 views
4

我有C代碼,它使用了許多由靜態字符串常量標識的命令。Java,「指針」相等和字符串比較

static char* KCmdA = "commandA" 
static char* KCmdB = "commandB" 
static char* KCmdC = "commandC" 

在CI可以使用strcmp比較兩個字符串(A,B)的例子,但我只能通過它們的靜態字符串標識是指這些命令它的速度更快,只檢查指針的不平等,因爲我知道我的unknowCMD只能是指向我的一個靜態字符串的指針。

switch(unknowCMD) 
{ 
    case KCmdA: 
    ... 
    case KCmdB: 
    ... 
} 

我在Java中猜相當於strcmp的將是equals方法:

unknowCMD.equals(KCmdA) 

有沒有在Java中指針相等的等效?我知道Java只使用引用。是否有可能使用這些引用進行平等測試而不實際比較字符串?

對不起,如果這是顯而易見的我已經檢查了文檔,但沒有找到任何明確的答案。

回答

3

我認爲你在這裏使用靜態字符串的方式會更好地使用枚舉。 您可以使用.equals和==比較它們。 您也可以在開關盒中使用枚舉。

+0

確實。我其實並沒有使用它們,因爲我在某個地方看到它不是在Android上推薦的。但它實際上可能是我的問題的最佳方法。我將能夠使用帶有枚舉的switch語句。 – CodeFlakes 2012-07-11 10:35:58

6

如果你比較字符串refrences平等使用==

if(str1==str2){ 

} 
+0

@downvoter謹慎地說爲什麼downvoted是否有任何錯誤? – 2012-07-11 10:55:31

4

您可以使用==,但它的危險和脆弱。

請注意,對於String s,equals()所做的第一件事是測試參考文獻的等同性,因此您不會因此購買太多。

+0

哇,這是一個快速的答案。好,等於實際上並不比較現在好的字符串內容。這實際上讓我有一個相關的問題。如何使用switch語句比較字符串? – CodeFlakes 2012-07-11 10:26:40

+2

您需要Java SE 7。請參閱http://stackoverflow.com/questions/338206/switch-statement-with-strings-in-java – mmalmeida 2012-07-11 10:29:08

+0

什麼?!這只是最近的一個功能?我正在爲Android開發,因此我無法使用它。無論如何,非常感謝你們倆。 – CodeFlakes 2012-07-11 10:32:56