Java中的“指针”相等性和字符串比较

4

我有一些使用静态字符串常量标识的命令的C代码。

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

在C语言中,我可以使用strcmp(A, B)比较两个字符串。但由于我只通过它们的静态字符串标识符来引用这些命令,所以只检查指针不等性会更快,因为我知道我的unknowCMD只能是指向我的静态字符串之一的指针。
switch(unknowCMD)
{
    case KCmdA:
    ...
    case KCmdB:
    ...
}

我想在Java中,相当于strcmp的方法应该是equals:

unknowCMD.equals(KCmdA)

Java中是否有指针相等的等价物?我知道Java只使用引用。是否可能使用这些引用进行相等性测试,而不实际比较字符串?

如果这很明显,对不起,我已查看文档但没有找到确定的答案。

3个回答

6

如果您要比较字符串引用的相等性,请使用==

if(str1==str2){

}

4

你可以使用==,但这是危险和脆弱的。

请注意,对于Stringequals()首先测试引用的相等性,因此通过这样做几乎没有什么收益。


哇,那回答得真快。好的,所以 equals 实际上并不比较字符串内容,这很好知道。这让我想到了一个相关的问题。我如何使用 switch 语句来比较字符串? - CodeFlakes
2
你需要Java SE 7才能做到这一点。请参阅https://dev59.com/8XRC5IYBdhLWcg3wUfN2。 - mmalmeida
什么?!这只是最近的一个功能?我正在开发Android,所以我将无法使用它。不管怎样,非常感谢你们两个。 - CodeFlakes

3

我认为你在这里使用静态字符串的方式,最好使用枚举类型。你可以使用 .equals 和 == 进行比较。你也可以在 switch case 中使用枚举类型。


确实。我实际上没有使用它们,因为我在某个地方读到在Android上不推荐使用它们。但这实际上可能是解决我的问题的最佳方法。我将能够使用枚举的switch语句。 - CodeFlakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接