java - 字符串 boolean 混淆

标签 java string boolean equals

我正在做计算机科学测试练习并尝试了这个问题。

String sam = "scary";
String ben = new String("scary");
String wil = "scary";
out.print( sam == ben );
out.print( " " + (sam == wil) );

据我所知,我认为打印输出是 false false,因为据我所知,字符串只能与 .equals() 进行比较。但我错了。它说答案是假的。有人可以解释一下为什么吗?

最佳答案

可以使用==比较字符串。但是,它比较字符串引用而不是字符序列。

如果两个字符序列不同,== 将始终评估为 false。如果相同,==可能返回true,也可能返回false;这取决于两个字符串对象是如何存在的。

samwil 引用同一对象的原因在 JLS §3.10.5 String Literals 中有详细说明。 :

String literals - or, more generally, strings that are the values of constant expressions (§15.28) - are "interned" so as to share unique instances, using the method String.intern.

有关此行为的详细说明,请参阅 JLS 中的示例 3.10.5-1。

关于java - 字符串 boolean 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987852/

相关文章:

python - boolean 矩阵相乘

java - 错误: Could not find or load main class pj2 on bash

java - 第一次运行 MyBatis 报错信息

Java正则表达式删除Freemarker插值标签

java - 如何执行不区分大小写的模式搜索和保留大小写的替换?

c++ - 带有 boolean 值的 ASSERT_EQ 在 gtest 中失败

c - 为什么在 stdbool.h 中使用整数而不是无符号整数?

Java if 语句终止错误

linux - 使用 sed 编辑脚本中的 url 字符串

javascript - 需要使用JavaScript过滤掉字符串中重复的连续字符