加法运算符(+)执行连接而不是加法

时间:2016-10-13 05:33:55

标签: java string-concatenation operator-precedence

我是Java新手。当我通过下面的循环处理时,我想显示循环的计数器值增加1.当我保留下面的代码时,我得到的值就像用计数器值连接1一样。为什么System.out.println使用连接而不是添加?

for (c = 0; c < Size; c++) {
  System.out.println("here the problem " + c+1 + " Case");
}

3 个答案:

答案 0 :(得分:2)

+运算符对于连接和附加都是重载的,并且两个运算符具有相同的优先级,因此操作从左到右进行计算。

从左侧开始,遇到的第一个操作数是字符串"here the problem",因此操作员知道它应该执行连接。它继续将c连接到该String,产生一个新的String。

因此,第二个+正在对结果字符串和1进行操作,因此它再次进行连接。

如果您想要专门控制操作的顺序,并在c + 1之前评估"here the problem" + c,那么您需要将操作括在括号中:

"here the problem " + (c + 1) + " Case"

答案 1 :(得分:1)

试试这个

for (c = 0; c < Size; c++) {
  System.out.println("here the problem " + (c+1) + " Case");
 }

因为这总是试图在字符串连接之前评估括号中的表达式

答案 2 :(得分:0)

这不是System.out.println如何工作的问题。 Java将您的语句视为连接。 因为当你使用+ with string时,其他变量将被视为字符串,而java将执行连接