int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
输出将是:
false
true
我不明白为什么,请向我解释一下。
int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
输出将是:
false
true
我不明白为什么,请向我解释一下。
的操作数==从左到右进行评估,并且++具有更高的优先级,因此您的代码等效于:
int z = 1;
int tmp1 = z++; //tmp1 = 1 / z = 2
int tmp2 = ++z; //tmp2 = 3 / z = 3
System.out.println(tmp1 == tmp2);
tmp1 = ++z; //tmp1 = 4 / z = 4
tmp2 = z++; //tmp2 = 4 / z = 5
System.out.println(tmp1 == tmp2);
z++我假设您了解和之间的区别++z:
tmp1 = z++;可以分解为:tmp1 = z; z = z + 1;tmp2 = ++z;可以分解为:z = z + 1; tmp2 = z;int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
z++ 是后增量,++z 是前增量。后增量在计算表达式后增加值,而前增量在计算表达式之前增加值。
因此,
int z = 1;
System.out.println(z++ == ++z); // 1 == 3 false
System.out.println(++z == z++);// 4 == 4 true
运算符==优先于其左侧的内容,换句话说,由于它对 2 个值进行操作,因此首先评估左侧的值。
var 的标签之前的运算符++表示在评估它之前将增量分配给该值,放在标签之后的相同运算符会导致后增量,这意味着变量的值在评估它之后增加 1。
关于代码的第二行:
==向左看z为1z++的意思是增加了增量z,所以现在z是2但是由==操作员评估为1,请记住这一点。==向右看z不进行增量的情况下评估其中的内容++z,这意味着z被评估为31!= 3。
相同的概念适用于下一行。
System.out.println(z++ == ++z); // 1 == 3 is false
System.out.println(++z == z++); // 4 == 4 is true
在使用后增量值被复制到临时变量 'tmp' 中时,请在此处检查postincrement。所以z++ == ++z=> 评估1 == 3哪个是假的。现在 z 为 3。
来到第二个表达式 : ++z == z++,再次: ++z 变为 4 并且在 z++ 的情况下,值被复制到tmp变量中并在z++. 表达式变为4 == 4真值和最终值z is 5
首先你应该清楚前增量和后增量让我们看看
int i=1;
int j=i++;
int k=++i;
这里的值jwill be1和kwill be3
为什么意味着i++首先将值存储i到j其中,然后增加iso的值
j=1,i=2 ok :)
现在在++iwhere 首先增加值然后存储到kso的情况下
k=3,i=3 ok :)
现在我来回答你的问题
int z = 1; System.out.println(z++ == ++z);
那么告诉我会是z++什么?1 好的 :) 因此++z会是?3所以该语句将打印falseok :) 和第二种情况
System.out.println(++z == z++);
++z将是4并且z++将是4所以你得到 true
所以希望你清楚......
++z 语句返回 z 的增量值,而 z++ 返回增量之前的值,然而 z++ 表达式返回后的 z 值是 z 的增量值。
所以
int z = 1; // Line 1
System.out.println(z++ == ++z); // Line 2
System.out.println(++z == z++); // Line 3
在第 2 行中,z++ 返回 1,并且 z 的值一旦返回就会增加,所以 z 现在是 2,++z 在返回之前增加值,所以 z 是 3。因此第 2 行是
System.out.println(1 == 3);
这是错误的。
在第 3 行中,++z 的计算结果为 4(因为 z 的前一个值是 3)并且 z++ 再次返回 z 的前一个值,即 4 但现在 z 是 5。因此第 3 行是
System.out.println(4 == 4);
这是真的。