Java中两个字符串使用==进行比较的结果为false吗?
Java中比较两个字符串是否相等时,使用"=="运算符会返回false的原因是,如果字符串没有被interned(即没有被放入字符串常量池),那么"=="运算符会检查引用的身份。解决方法是使用equals方法进行比较,如下所示:
"231".equals(parts[0]);
其中一个人提到,字符串字面量之间使用"=="运算符比较时会返回true。但是,我的一位学生不相信我,他认为"=="运算符会检查字符串的实际内容,因为他所提供的所有示例都是使用字符串字面量并返回true。
有人问为什么数组中的字符串没有被interned,如果数组是使用字符串字面量创建的。另一个人回答说,问题的设定是数组只是列举了字符串的内容,并没有说明它们是如何创建的。
有人想要指出的是,如果使用以下方式创建字符串:string=new String[]{"231"}[0];
,那么它是没有被interned的。对于为什么会这样,他也不清楚,因为字符串是硬编码在代码中的(数组使用了字符串字面量)。
另一个人回答说,如果根据问题描述来判断,实际上并不是这样的,只是问题的提问者简化了描述。如果你真的遇到了这个问题,那么他也不知道原因。
令人惊讶的是,如果字符串是按照上述方式创建的,它将不会被interned。提问者决定另外提一个问题来询问为什么会这样。