我有以下示例代码:
int pay = 80;
int bonus = 65;
System.out.println(pay + bonus + " " + bonus + pay);
有人可以向我解释为什么我得到以下输出:
145 6580
您的代码正在从左到右解释表达式。
pay + bonus
被解释为一个数学函数,因此它将值相加得到 145。+
这里是一个加号运算符。" "
,Java 将表达式转换为字符串。这里+
是一个连接运算符。+ pay
转换pay
为字符串并将其连接起来,因为表达式是字符串。+ bonus
转换bonus
为字符串并将其连接起来。因为,这是operator overloading
个问题。这里,First+
是plus
运算符,last+
是concat
运算符。
System.out.println(pay + bonus + " " + bonus + pay);
| |
(plus) (concat)
First it adds the two variables and at last it concatinates as string because the integers are converted into strings
For concatenation, imagine a and b are integers:
"" + a + b
This works because the + operator is overloaded if either operand is a String. It then converts the other operand to a string (if needed) and results in a new concatenated string. You could also invoke Integer.toString(a) + Integer.toString(b)
for concatenation
bonus
and pay
are both ints, and therefore going to be combined into a single int result.
You need to insert an empty string between them.
first is plus operator
and last is concat operator
正如其他人所说,编译器首先将整数值相加,然后打印结果,在“”之后,总值被更改为 String
类型,并且在该+
运算符作为连接操作之后。要获得该输出,您可以执行以下操作:
System.out.println(String.valueOf(pay) + String.valueOf(bonus) + " " + String.valueOf(bonus) + String.valueOf(pay));
println 中的第一个工资和奖金返回一个整数。所以它会计算 pay+bonus 并在打印出来之前将其作为整数返回。
但是,在“”之后。然后 + 操作变成了字符串的串联,之后的所有内容都作为串联的字符串返回。因此,("" + bonus + pay) 将返回为 "6580"。
" "之前,pay和bonus为整数,相加结果为145。在" "之后,bonus and pay为String,结果为"6580"
被“”包围的内容被称为“字面印刷”,并被准确印刷。“+”号是连接运算符,将字符串与存储在变量中的值连接起来。pay 和 bonus 被声明为 int,但会自动转换为 String 以便打印出来。
您可以在 System.out.print 语句中打印算术表达式。在算术表达式周围使用括号以避免意外问题。
System.out.println("ex" + 3 + 4); // becomes answer 34
System.out.println("ex" + (3 + 4)); // becomes answer 7