2012-07-11 36 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