为什么我可以';是否不使用多个Java递增或递减运算符?
当我同时使用两个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
请检查下面的代码。
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
谢谢,现在我真的明白你的意思了。。谢谢你宝贵的时间。:)