为什么我可以';是否不使用多个Java递增或递减运算符?

为什么我可以';是否不使用多个Java递增或递减运算符?,java,operators,Java,Operators,当我同时使用两个Java增量运算符时,我感到非常惊讶。请检查下面的代码。 public class Testing { public static void main(String... str) { int prefix = 0, postfix = 0, both = 0; // Testing prefix System.out.println(prefix); System.out.println(++prefix); System.out.pr

当我同时使用两个Java增量运算符时,我感到非常惊讶。
请检查下面的代码。

public class Testing {

public static void main(String... str) {
    int prefix = 0, postfix = 0, both = 0;
    // Testing prefix
    System.out.println(prefix);
    System.out.println(++prefix);
    System.out.println(prefix);
    // Testing postfix
    System.out.println(postfix);
    System.out.println(postfix++);
    System.out.println(postfix);
    // mixing both prefix and postfix (I think this should be fine)
    // System.out.println(++ both ++);
  }
}

为什么我不能同时使用as
++++
?谁能给我解释一下吗?谢谢。

++x
x++
的结果归类为一个值,而不是一个变量,并且这两个运算符只对变量起作用

例如,来自:

后缀表达式后跟++运算符是后缀增量表达式

    PostIncrementExpression:
       PostfixExpression ++
后缀表达式的结果必须是可转换(§5.1.8)为数值类型的变量,否则会发生编译时错误

后缀增量表达式的类型是变量的类型。后缀增量表达式的结果不是一个变量,而是一个值

(15.14.3中的
PrefixIncrementExpression
使用了几乎相同的语言。)

例如

inti=0

现在
i++
==>1


现在
1++
是错误
++
仅用于变量,不用于常量。

++prefix
它将在控制台中打印的值之前展开。但是
prefix++
将打印,然后仅展开。分配这些值,您将得到相同的结果。但是使用Sout,结果可能仅在打印时间上有所不同。

这些运算符来自C语言,其中每个表达式(包括操作)都有一个值

++
是一个运算符,但它也定义了一个值:

i++
表示执行此指令后,变量
i
已收到
i+1
的值。表达式
(i++)
的值是
i
的值

++i
表示执行此指令后,变量
i
已收到
i+1
的值。表达式
(++i)
的值是表达式
(i+1)
的值

<代码> ++i++如果你考虑以上,就没有意义了。code>++i++

可能是
(++i++
++(i++)
,这两个表达式都无效,因为
++
应用于变量,而
(i++)
(++i)
都是值

同样地,
i++
也没有意义,因为它将是
(i++++++
(i++)
i
的值,而不是变量

下页对此进行了更详细的解释:

如果愿意,让我们编写一个等价于
i++

int var_pp(int * var) {
    temp = *var;
    *var = temp + 1;
    return temp;
}
i++
var\u pp(&i)
的行为方式相同

让我们编写一个等价于
++i

int pp_var(int * var) {
    *var = *var + 1;
    return *var;
}
++i
pp\u var(&i)
的行为方式相同


<>代码> > ++< /COD>运算符有未定义的行为:考虑<代码> I+++++i >,发生什么取决于编译器如何理解此代码,以及当执行<代码>存储I/EXECUT>操作时。由于这些运算符的组合具有高度的不确定性,因此它们未被语言定义。您的编译器可能会警告您,也可能不会警告您,如果没有警告,结果将取决于它的实现。

为什么我不能同时使用as++++
,您能解释一下吗?您想如何使用它们?@sᴜʀᴇsʜᴀᴛᴛᴀ 我想象第一次执行时第一次增加,然后又增加。这是他们询问的最后一行注释。谢谢详细解释,我真的很感激。但是这个语句表达式(++i)的值就是表达式(i+1)的值。我认为
(++I)
是表达式
(I+=1)
的值。这是完全相同的:
I+=1
意味着在执行指令后,变量
I
收到了
I+1
的值。表达式
(i+=1)
的值是表达式
(i+1)
的值,而
(i+=1)
(i+1)
的值不一样,因为
i
在执行
(i+=1)
之后更新它的值,而
(i+1)
不一样。我不是说它们是一样的,它们是做不同事情的不同表达式,但它们的计算结果是相同的
k=i+1
是另一个完全不同的操作,但是这个表达式的值再次是
i+1
谢谢,现在我真的明白你的意思了。。谢谢你宝贵的时间。:)