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