【发布时间】:2014-10-06 17:57:20
【问题描述】:
我在一个 java 项目中有一个长度 = 1 的字符串 response_content,我知道它等于 1 (ASCII 49)。我知道这一点,因为以下几行(在带有 android ADT+SDK 的 Eclipse 中)
Log.i("GET RESPONSE", response_content);
Log.i("GET RESPONSE", response_content.length());
Log.i("GET RESPONSE", response_content.codePointAt(0));
产生这个输出:
1
1
49
但是为什么这些行总是返回 false?
if (response_content.equals(1)) {...}
if (response_content == "1") {...}
我知道equals() 是合适的方法,== 仅用于测试目的。
有没有其他方法可以告诉我,字符串真正包含什么,或者我没有看到错误?
【问题讨论】:
-
== 不用于测试目的。它用于测试参考
-
== 用于比较实例(引用),使用equals()/equalsIgnoreCase()
-
比较字符串为
response_content.equals("1"); -
No "1"=="1" 将始终返回 true!但是如果你测试一个对另一个字符串文字或引用的字符串的引用,那么测试可能是错误的(这取决于字符串的构建方式)。
-
@CedricReichenbach "1"=="1" 将是真的,因为 Java 在编译时对字符串文字进行了实习。只有在运行时生成的字符串才是新对象。
标签: java android string-comparison