2
int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);

输出将是:

false
true

我不明白为什么,请向我解释一下。

4

6 回答 6

10

的操作数==从左到右进行评估,并且++具有更高的优先级,因此您的代码等效于:

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;
于 2012-08-20T11:08:20.957 回答
5
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
于 2012-08-20T11:04:57.557 回答
3

运算符==优先于其左侧的内容,换句话说,由于它对 2 个值进行操作,因此首先评估左侧的值。

var 的标签之前的运算符++表示在评估它之前将增量分配给该值,放在标签之后的相同运算符会导致后增量,这意味着变量的值在评估它之后增加 1。

关于代码的第二行:

  • 操作员==向左看
  • 运算符评估z1
  • 操作员已经完成了左侧部分,但是由于您z++的意思是增加了增量z,所以现在z2但是由==操作员评估为1,请记住这一点。
  • 操作员==向右看
  • 由于 ,操作员无法在z不进行增量的情况下评估其中的内容++z,这意味着z被评估为3

1!= 3。

相同的概念适用于下一行。

于 2012-08-20T11:18:50.197 回答
0
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

于 2012-08-20T11:03:42.183 回答
0

首先你应该清楚前增量和后增量让我们看看

int i=1;
int j=i++;
int k=++i;

这里的值jwill be1kwill be3

为什么意味着i++首先将值存储ij其中,然后增加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 所以希望你清楚......

于 2012-08-21T10:14:28.747 回答
0

++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);

这是真的

于 2014-02-25T06:28:35.067 回答