在Java中,我理解赋值求值为右操作数的值,所以像x == (y = x)evaluate 这样的语句true.
但是,此代码输出false.
public static void main(String[]args){
String x = "hello";
String y = "goodbye";
System.out.println(x.equals(x = y));
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?在我的理解中,它首先评估(x = y),分配x值y,然后返回值y.然后x.equals(y)是评估,这应该是true因为x和y现在应该共享相同的引用,而是,我得到false.
这里发生了什么?
在声明中:
fooFunc().barFunc(bazFunc());
Run Code Online (Sandbox Code Playgroud)
barFunc()显然不能执行,直到双方bazFunc()并fooFunc()已完成.
但就是执行的顺序fooFunc()和bazFunc()保障?
相关(但不同!)问题: Java中参数的执行顺序保证?
可能重复:
Java中参数的执行顺序保证?
如果我有一个Java方法,如:
public void func(byte b, byte c) {...}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
a = 0;
func(a++, a);
Run Code Online (Sandbox Code Playgroud)
首先传递哪个参数?因为如果我没有错,如果它是左边的那么b = 0和c = 1.如果它是正确的那么那么b = 0并且c = 0?
谢谢.