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
为1
z++
的意思是增加了增量z
,所以现在z
是2
但是由==
操作员评估为1
,请记住这一点。==
向右看z
不进行增量的情况下评估其中的内容++z
,这意味着z
被评估为3
1!= 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;
这里的值j
will be1
和k
will be3
为什么意味着i++
首先将值存储i
到j
其中,然后增加i
so的值
j=1,i=2 ok :)
现在在++i
where 首先增加值然后存储到k
so的情况下
k=3,i=3 ok :)
现在我来回答你的问题
int z = 1; System.out.println(z++ == ++z);
那么告诉我会是z++
什么?1 好的 :) 因此++z
会是?3
所以该语句将打印false
ok :) 和第二种情况
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);
这是真的。