java - 字符串连接如何在这里工作?
问题描述
字符串连接在这里如何工作?由于这里的返回值是字符串类型,所以一切都应该转换为字符串。但是为什么在"30Good3040morning"
这里打印,而不是"1020Good3040morning"
. 请帮忙。
class StringConcatinationWorking{
public static void main(String ...args){
String s1 = 10 + 20 + "Good" + 30 + 40 + "morning";
System.out.println(s1);
}
}
解决方案
请记住,+
运算符是左结合的,因此它从左到右“放置括号”。仅当至少一个操作数是 a 时才执行字符串连接String
。
请注意,喜欢10
和30
不是String
s 的东西。它们是int
文字。
你的表达式,放在括号后,变成:
(((((10 + 20) + "Good") + 30) + 40) + "morning")
如果我们从最里面的括号开始逐步评估,我们得到:
((((30 + "Good") + 30) + 40) + "morning") // 10 + 20
((("30Good" + 30) + 40) + "morning") // 30 + "Good"
(("30Good30" + 40) + "morning") // "30Good" + 30
("30Good3040" + "morning") // "30Good30" + 40
"30Good3040morning" // "30Good3040" + "morning"
注意我们如何得到 的子表达式10 + 20
,而不是 的子表达式30 + 40
。
要获得预期的结果,只需在""
术语之前或之后添加一个术语10
,使括号变为:
((((((10 + "") + 20) + "Good") + 30) + 40) + "morning")
推荐阅读
- c# - 在淘汰赛中从 Enum 中获取价值
- python - Python:如何为所有变量生成频率计数
- javascript - 在自定义搜索中抓取 JSON 图像
- python - 匹配后的Python正则表达式可能的匹配
- html - 在 Perl 中使用正则表达式从 HTML 中提取 img 标签
- azure-devops - VSTS 扩展 - 发布定义数据、环境 ID
- java - 片段中 setText() 上的 NullPointerException
- java - Jersey 不适用于 POST、PUT
- c# - MongoDB 中的 BulkWrite 操作因转义序列无效而失败
- python-3.x - Opencv无法打开相机