在字符串文字之后,所有的+都会被视为字符串连接运算符么?

时间:2016-01-04 10:43:40

标签: java

我还没有理解为什么整数在连接中被视为字符串文字。 E.g。

String s=10+30+" Sachin "+40+40;  
System.out.println(s);

输出为:40 Sachin 4040

为什么40+40没有添加,为什么会添加10+30

5 个答案:

答案 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'。