【问题标题】:Java, "pointer" equality and string comparisonJava,“指针”相等和字符串比较
【发布时间】:2012-07-11 10:21:53
【问题描述】:

我的 C 代码使用了大量由静态字符串常量标识的命令。

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 只使用引用。是否可以在不实际比较字符串的情况下使用这些引用进行相等测试?

对不起,如果这很明显,我已经检查了文档,但没有找到任何明确的答案。

【问题讨论】:

    标签: java string pointers reference equality


    【解决方案1】:

    如果你比较字符串引用的相等性使用==

    if(str1==str2){
    
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用==,但是它很危险而且很脆弱。

      请注意,对于Strings,equals() 所做的第一件事是测试引用的相等性,因此您不会通过这样做购买太多东西。

      【讨论】:

      • 哇,答案很快。 OK 所以equals实际上并没有比较到现在好的字符串内容。这实际上让我想到了一个相关的问题。如何使用 switch 语句来比较字符串?
      • 为此您需要 Java SE 7。见*.com/questions/338206/…
      • 什么?!这只是最近的功能?我正在为 Android 开发,所以我将无法使用它。无论如何,非常感谢你们俩。
      【解决方案3】:

      我认为您在这里使用静态字符串的方式最好使用 Enums。 您可以使用 .equals 和 == 来比较它们。 你也可以在 switch case 中使用枚举。

      【讨论】:

      • 确实如此。我实际上没有使用它们,因为我在某处读到它不推荐在 Android 上使用。但这实际上可能是解决我的问题的最佳方法。我将能够使用带有枚举的 switch 语句。
      最近更新 更多