我刚从高中的 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
?
谢谢
我刚从高中的 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
?
谢谢
取决于它的优先顺序
当两个运算符共享一个操作数时,优先级较高的运算符先行。例如,1 + 2 * 3 被视为 1 + (2 * 3),而 1 * 2 + 3 被视为 (1 * 2) + 3 ,因为乘法的优先级高于加法(+)。
如果您想对 进行任何数学运算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);
b
留a
在第一名。编译器执行a+b
第 1 次,在添加字符串之后,您不需要大括号
“*”的运算符优先级高于“+”,这意味着表达式“4 * 5”是在字符串连接发生之前计算的。
请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
它与运算符优先级有关:
首先,4 * 5 = 20
其次,“数字”与 6 连接,进一步与 20 连接。
在您的第一个示例中,由于您使用了乘法运算符,因此在连接到其他字符串之前将 4 乘以 5。
对于第二个示例,您从字符串之前的 2 个整数开始,该字符串将在连接到字符串之前首先计算。
为什么 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
。
这是关于两件事:
有以下+
规则:
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
你的第一个例子:“数字”+ 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紧缩”
根据你的问题和答案
解释是
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