这个问题让我疯了!我在常量类中声明了一个静态字符串,如下所示:
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()会失败(我的意思是两个字符串在同一序列中包含相同的字符)?
答案 0 :(得分:0)
关于.equals()方法在将String与枚举常量进行比较时失败,实际上这是默认行为,以防你没有覆盖枚举类中的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