java - java中字符串与布尔值的连接
问题描述
有人可以解释为什么第 5 行代码只打印 false 而不是“Hello all false”。谢谢
class Hello {
public static void main(String[] args) {
final String s1 = "Hello";
final String s2 = "hello all" + s1.length();
System.out.println("Hello all" + s1==s2);
}
}
解决方案
Java 将最终表达式计算为"(Hello all" + s1) ==s2
,而不是"Hello all" + (s1==s2)
您可能想要的 。
此外,永远不要将String
s 与进行比较==
,始终使用s1.equals(s2)
. ==
检查两个字符串是否在内存中占据相同的位置。
添加括号,然后更改为.equals()
,它应该按预期工作。
编辑
正如 Krystian 所建议的,值得指出在相等检查之后执行加法的原因。
每个运算符都有一个优先级,它表示运算符在运算顺序不明确时(即,当括号不足以完全描述顺序时)的优先级。
例如,在计算表达式时1 + 2 * 3
,它被分组为1 + (2 * 3)
(就像在数学中一样),因为*
它的优先级高于+
.
==
也是一个运算符,所以也有一个优先级。它的优先级低于+
,因此在 之后进行评估+
。
以下链接更彻底地解释了所有运算符的优先级:https ://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
推荐阅读
- javascript - 在组件中反应调用函数,但函数失去了 this 的定义
- finagle - 在 finagle 中的客户端实例之间共享连接池
- java - 找不到文件:HelloWorld.java
- json.net - JSchemaGenerator 在输出中省略“$scema”
- python - 尝试使用 python 脚本进行 GUI 自动化,但卡在菜单选择操作中
- angular - 制作两个 Objets to mach
- java - 如何在我的 Maven 项目中导入 FFMPEG 库?
- azure - Azure 日志分析简单饼图
- r - 删除百分比轴中的小数 - R
- dart - 固定ExtentScrollPhysics 颤振