4

这个问题快把我逼疯了!我在常量类中声明了一个静态字符串,如下所示:

public static final String REGISTRATION_USERNAME_TAKEN = "Username is already in use. Please choose a different name.";

在调用 RESTful Web 服务以注册用户后,响应(在调试期间)被捕获并与常量进行比较。响应也出现在双双引号中(不知道为什么)并且 result.equals() 失败,即使结果和常量看起来完全相同。下面是在 Eclipse 中调试期间的屏幕截图,其中显示了双双引号。61 个字符数包括一组双引号。

有没有人在 Eclipse 中见过这个?另外,当两个字符串具有相同的值时,为什么 .equals() 会失败(我的意思是两个字符串都包含相同序列中的相同字符)?

在此处输入图像描述

4

1 回答 1

0

关于在将字符串与枚举常量进行比较时 .equals() 方法失败,实际上这是默认行为,以防您没有覆盖枚举类中的 toString() 方法。

例如:

public MyEnum
{
  LIL, LOL
}

//try inside main method
String result = "LOL";

if(result.equals(MyEnum.LOL))
System.out.println("true");
else
System.out.println("false"); //will print false

因此,如果要将 String 与枚举可能具有的确切 String 值进行比较,您可以向枚举添加一个私有字段,该字段将保存您将在构造函数中定义的相应 String 值,并通过覆盖 toString() 返回在枚举内部,或者您可以通过执行以下操作强制使用 toString() :

if(result.equals((MyEnum.LOL).toString())
//same code as before would print true
于 2012-08-01T14:32:40.903 回答