Java +;运算符和字符串

Java +;运算符和字符串,java,string,operator-keyword,Java,String,Operator Keyword,我高中刚开始学习AP Comp sci,我偶然发现了一个关于字符串中+运算符的问题 为什么 System.out.println(“数字”+6+4*5) 结果是620号 鉴于 String s = "crunch"; int a = 3, b = 1; System.out.print(s + a + b); System.out.print(b + a + s); 导致crunch314crunch 谢谢如果您想对System.out.println进行任何运算,请用大括号将其括起来,因为J

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

为什么
System.out.println(“数字”+6+4*5)
结果是620号

鉴于

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


谢谢

如果您想对
System.out.println
进行任何运算,请用大括号将其括起来,因为Java在第一位看到字符串

尝试
System.out.println(“数字”+(6+4*5))

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

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

但在
System.out.print中(b+a+s)
b
a
排在第一位。编译器在第一次添加字符串后不需要大括号,这取决于

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

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


请参见

它与运算符优先级有关:

首先,4*5=20


第二,“number”与6相连,后者进一步与20相连。

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

为什么System.out.println(“数字”+6+4*5)会产生数字620

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

字符串s=“crunch”;INTA=3,b=1;系统输出打印(s+a+b); 系统输出打印项次(b+a+s);结果是crunch314crunch

这里,+用作运算符重载,而不是二进制操作。所以,“+”执行concat运算,而不是sum运算。因此,结果是
crunch314crunch

这是关于两件事:

  • 运算符优先级
  • 字符串串联与加法
+
具有以下规则:

int + int => int
int + string => String 
String + int => String 
String + String => String
也就是说,只要涉及
字符串
+
就意味着连接

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

String + int + int => String + int => String
但是

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


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

String + int * int => String + int => String
这都是关于运算符优先级和它们的关联性。 您的第一个示例:“数字”+6+4*5

根据运算符优先级,首先计算
*
,因此它变为“数字”+6+20

现在,
+
的关联性是Left->Right(L->R),因此+成为一个串联运算符,因为它与
字符串一起使用,所以表达式变成“number6”+20,然后变成“number620”

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

同样,您的第二个示例:

仅使用
+
运算符并从L->R开始执行

“crunch”+3+1=“crunch3”+1=“crunch31”


1+3+“crunch”=4+“crunch”=“4crunch”

根据您的问答

解释是

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

+是连接运算符,必须在()中使用加法运算符才能进行区分
crunch314crunch