1

我刚从高中的 AP Comp sci 开始,我偶然发现了一个关于字符串中 + 运算符的问题

为什么会 System.out.println ("number" + 6 + 4 * 5) 导致 number620

然而

String s = "crunch";
int a = 3, b = 1;
System.out.print(s + a + b);
System.out.print(b + a + s);

结果crunch314crunch

谢谢

4

9 回答 9

3

取决于它的优先顺序

当两个运算符共享一个操作数时,优先级较高的运算符先行。例如,1 + 2 * 3 被视为 1 + (2 * 3),而 1 * 2 + 3 被视为 (1 * 2) + 3 ,因为乘法的优先级高于加法(+)。

于 2013-09-12T06:53:53.753 回答
0

如果您想对 进行任何数学运算System.out.println,请将其用大括号括起来,因为 Java 将 String 放在第一位。

试试System.out.println ("number" + (6 + 4 * 5))

对于第二个示例使用:System.out.print(s + (a + b));

在这种情况下,您有 和 的a总和b

System.out.print(b + a + s); ba在第一名。编译器执行a+b第 1 次,在添加字符串之后,您不需要大括号

于 2013-09-12T06:53:50.507 回答
0

“*”的运算符优先级高于“+”,这意味着表达式“4 * 5”是在字符串连接发生之前计算的。

请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

于 2013-09-12T06:55:12.683 回答
0

它与运算符优先级有关:

首先,4 * 5 = 20

其次,“数字”与 6 连接,进一步与 20 连接。

于 2013-09-12T06:56:19.363 回答
0

在您的第一个示例中,由于您使用了乘法运算符,因此在连接到其他字符串之前将 4 乘以 5。
对于第二个示例,您从字符串之前的 2 个整数开始,该字符串将在连接到字符串之前首先计算。

于 2013-09-12T06:57:29.987 回答
0

为什么 System.out.println("number" + 6 + 4 * 5) 会导致 number620

因为,* 的优先级高于 +,所以结果是number620.

字符串 s = "紧缩"; 整数a = 3,b = 1;System.out.print(s + a + b); System.out.println(b + a + s); 导致紧缩314紧缩?

在这里,+ 用作运算符重载而不是二进制操作。所以,'+' 做 concat 操作,而不是 sum 操作。所以,结果是crunch314crunch

于 2013-09-12T06:58:19.773 回答
0

这是关于两件事:

  • 运算符优先级
  • 字符串连接与加法

有以下+规则:

int + int => int
int + string => String 
String + int => String 
String + String => String

也就是说,只要String涉及 a,就+意味着串联。

具有相同优先级的运算符从左到右求值。所以

String + int + int => String + int => String

int + int + String => int + String => String

第一种情况仅使用串联,而第二种情况在第一步中使用加法。


在您的第一个示例中,*优先级高于+,因此首先执行乘法。

String + int * int => String + int => String
于 2013-09-12T06:58:43.717 回答
0

这都是关于运算符优先级和它们的关联性。

你的第一个例子:“数字”+ 6 + 4 * 5

会计。to 运算符优先级先*计算,所以变成了"number" + 6 + 20

现在,关联性为+Left -> Right (L->R),因此 + 成为连接运算符,因为它与 一起使用String,因此表达式变为"number6" + 20,然后是 "number620"

(实际上int是在连接之前转换为String

同样,您的第二个示例:

只有+运算符并从 L->R 开始执行

“紧缩” + 3 + 1 = “紧缩3” + 1 = “紧缩31”

1 + 3 + “紧缩” = 4 + “紧缩” = “4紧缩”

于 2013-09-12T07:00:02.013 回答
0

根据你的问题和答案

解释是

1.
  A)System.out.println ("number" + 6 + 4 * 5);
  B)System.out.println ("number6" + 4 * 5);
  C)System.out.println ("number6" + 20);
  D)System.out.println ("number620");

它打印输出像

number620

第二个是

2.
  A)System.out.print("crunch" + 3 + 1);
    System.out.print(1 + 3 + "crunch");
  B)System.out.print("crunch3" + 1);
    System.out.print(4 + "crunch");
  C)System.out.print("crunch31");
    System.out.print("4crunch");

它在一行中打印输出,为什么因为你使用了print()语句

crunch314crunch
于 2013-09-12T07:02:16.187 回答