我还没有理解为什么整数在连接中被视为字符串文字。 E.g。
String s=10+30+" Sachin "+40+40;
System.out.println(s);
输出为:40 Sachin 4040
。
为什么40+40
没有添加,为什么会添加10+30
?
答案 0 :(得分:8)
表达式从左到右进行评估。前两个操作数都是int
(10和30),因此第一个+
执行加法。
下一个+
获得int
操作数(40)和String
操作数(“Sachin”),因此会将int
转换为String
并执行String
连接。
下一个+
运算符获得String
操作数和int
操作数,并执行String
连接。
如果您需要不同的评估订单,请使用括号:
String s=10+30+" Sachin "+(40+40);
这将输出40 Sachin 80
。
答案 1 :(得分:3)
因为它是如何实现的,因为+用于添加数字,就像字符串连接一样。
第一次,这两个部分都不是String,但都是可以添加的数值,因此它用于添加值。
但是,只要两者中的一部分是String,就会用于字符串连接。
更改您的代码:
String s=10+30+" Sachin "+(40+40);
答案 2 :(得分:3)
这是因为Java从左到右评估操作数。引用section 15.7:
Java编程语言保证运算符的操作数似乎在特定的评估顺序中进行评估,即从左到右。
String s=10+30+" Sachin "+40+40;
// ^^^^^ + the operands are of type int so int addition is performed
String s=40+" Sachin "+40+40;
// ^^^^^^^^^^^^^ + the operands are of type int and String so String concatenation is performed
String s="40 Sachin "+40+40;
// ^^^^^^^^^^^^^^^ + the operands are of type int and String so String concatenation is performed
String s="40 Sachin 40"+40;
// ^^^^^^^^^^^^^^^^^ + the operands are of type int and String so String concatenation is performed
String s="40 Sachin 4040";
在section 15.18.1中指定其中一个操作数为+
时String
关于“字符串连接运算符+
”的行为:
如果只有一个操作数表达式是
String
类型,则对另一个操作数执行字符串转换(第5.1.11节)以在运行时生成字符串。
答案 3 :(得分:2)
添加是关联的。 让我们一步一步地看到它
10+30+" Sachin "+40+40
----- -------
40 +" Sachin "+40+40 <--- here both operands are integers with the + operator, which is addition
---
"40 Sachin "+40+40 <--- + operator on integer and string results in concatenation
-----------
"40 Sachin 40"+40 <--- + operator on integer and string results in concatenation
--------------
"40 Sachin 4040" <--- + operator on integer and string results in concatenation
-----------------
答案 4 :(得分:0)
语句中有两种'+'运算符,一个是String对象,另一个是Integer对象:
String s = 10 + 30 +“Sachin”+ 40 + 40;
首先应用的操作是'10 + 30'。让我们看看'10'的值,这被解释为Integer对象,它在值'30'上激活运算符'+',结果为40的整数。
接下来的操作是'Sachin'的最后结果40:40 +'Sachin'。在String对象上激活'+'运算符的整数对象,它导致'40 Sachin'的String对象。
下一个操作是最后一个结果String对象('40 Sachin'),它会添加Integer 40,从而产生'40 Sachin 40'。
以同样的方式添加最后的'40',最终导致 '40 Sachin 4040'。