字符串连接在这里如何工作?
由于此处的返回值为String类型,因此应将所有内容都转换为string。但是为什么在这里打印"30Good3040morning"
而不是"1020Good3040morning"
。请帮忙。
class StringConcatinationWorking{
public static void main(String ...args){
String s1 = 10 + 20 + "Good" + 30 + 40 + "morning";
System.out.println(s1);
}
}
答案 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();