首页 > 解决方案 > 字符串连接如何在这里工作?

问题描述

字符串连接在这里如何工作?由于这里的返回值是字符串类型,所以一切都应该转换为字符串。但是为什么在"30Good3040morning"这里打印,而不是"1020Good3040morning". 请帮忙。

class StringConcatinationWorking{
    public static void main(String ...args){
        String s1 = 10 + 20 + "Good" + 30 + 40 + "morning";
        System.out.println(s1);
    }
}

标签: javastringstring-concatenation

解决方案


请记住,+运算符是左结合的,因此它从左到右“放置括号”。仅当至少一个操作数是 a 时才执行字符串连接String

请注意,喜欢1030不是Strings 的东西。它们是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")

推荐阅读