java中System.out.println的奇怪行为

java中System.out.println的奇怪行为,java,Java,对于第1行,输出为false 对于第2行,输出为*****false*** 对于第2行,它正在正确连接 我的问题是,为什么第1行只打印值,而不打印带星号的正确输出。操作数的优先级高于==(这在比较数学表达式时很有意义),因此“**”+f==b+“**”与(***+f)=(b+“**”)相同操作数的优先级高于=(在比较数学表达式时,这是有意义的),因此“*****”+f==b+“*****”与(“*****”+f)==(b+“***”如果希望两行相同,则应将“第1行”更改为: 括号将提供必要的优先

对于第1行,输出为
false

对于第2行,输出为
*****false***

对于第2行,它正在正确连接


我的问题是,为什么第1行只打印值,而不打印带星号的正确输出。操作数的优先级高于
==
(这在比较数学表达式时很有意义),因此
“**”+f==b+“**”
(***+f)=(b+“**”)相同

操作数的优先级高于
=
(在比较数学表达式时,这是有意义的),因此
“*****”+f==b+“*****”
(“*****”+f)==(b+“***”

如果希望两行相同,则应将“第1行”更改为:

括号将提供必要的优先级

您说过“第2行连接正确”。实际上,第1行也正确地连接在一起(就Java而言)。您对第1行的了解可以分解如下:

System.out.println("****"+(f==b)+"****");

如上所示,连接会产生新字符串,并比较它们的实例是否相等。最后的结果“false”非常合理。

如果希望两行相同,则应将“line 1”更改为:

括号将提供必要的优先级

您说过“第2行连接正确”。实际上,第1行也正确地连接在一起(就Java而言)。您对第1行的了解可以分解如下:

System.out.println("****"+(f==b)+"****");
如上所示,连接会产生新字符串,并比较它们的实例是否相等。最后的结果“假”是完全有道理的

String tmp1 = "****" + f;  // ****Foo@56f0474c
String tmp2 = b + "****";  // Boo@6d15a113****
System.out.println(tmp1 == tmp2); // Are the two String instances equivalent?