字符串连接在这里如何工作?

时间:2019-05-20 13:14:48

标签: java string string-concatenation

字符串连接在这里如何工作? 由于此处的返回值为String类型,因此应将所有内容都转换为string。但是为什么在这里打印"30Good3040morning"而不是"1020Good3040morning"。请帮忙。

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

2 个答案:

答案 0 :(得分:6)

请记住,console.log(options.account) // undefined, console.log(options.account.country) // error. 运算符是左关联的,因此它从左到右“放入括号”。 仅当至少一个操作数为 const parsedObj = JSON.parse(options); console.log(parsedObj); 时才执行字符串连接。

请注意,+String之类的东西不是10。它们是30文字。

放在方括号后,您的表达式变为:

String

如果我们从最里面的括号开始逐步评估,则会得到:

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词,这样方括号将变为:

""

答案 1 :(得分:1)

适用加法规则:从左到右评估,首先进行乘法和除法。

10 + 20 + "Good" + 30 + 40 + "morning"

可以看到前10 + 20,即整数+整数。没有看到字符串。好的,将整数设为30。
然后会看到一个字符串,整数+字符串。将类型更改为字符串"30" + "Good" = "30Good"
那么至少可以看到一个字符串,然后转换为字符串。

要使所有内容都为String,请使用StringBuilder并将值放入其中以获取String。
或在串联列表前面添加一个“”,以一个字符串开头,将所有内容都转换为String,可能的乘法或减法除外。

"" + 10 + 20 + "Good" + 30 + 40 + "morning"

如果其中有乘法或除法,则适用相同的加法规则。那些先于加法或减法

 10 + 20 + "Good" + 30 * 40 + "morning" == "30Good1200morning"

 10 + 20 + "Good" + 30 / 40 + "morning" == "30Good0morning"

在这种情况下,我喜欢使用StringBuilder,这样您就可以对附加的内容进行细粒度的控制,而您只需忘记这些混合类型可能适用的加法和乘法规则的顺序,代码就变成了更具可读性和自我记录。 see it online

String newstr = new StringBuilder()
                    .append(10)
                    .append(20)
                    .append("Good")
                    .append(30)
                    .append(40)
                    .append("morning")
                    .toString();