java - 前缀和后缀运算符java

标签 java operators postfix-operator prefix-operator

我在 java 中尝试一元后缀和前缀运算符

这是代码

int a=10;

这行代码没有给出编译时错误

System.out.println(a+++ a +++a);   

但是这条线确实

System.out.println(a++ +++a);

而这一行甚至没有

System.out.println(a+++ ++a);

我无法理解编译器如何解释这些查询的模式。

最佳答案

  1. System.out.println(a+++ a+++a);

    被解释为相同

    System.out.println(a++ + a++ + a);

    编译执行如下:

    • 载入a作为第一个操作数; 第一个操作数现在是 10
    • 增加a(第一个a++),现在它的值是11
    • 载入a作为第二个操作数; 第二个操作数现在是 11(因为它在上一步中递增)
    • 增加a(第二个a++),现在它的值是12
    • 将两个操作数 10 + 11 相加得到 21,它现在是 a++ + a++ 的结果,我们称这个中间结果为 i , 它将作为下一个总和的第一个操作数
    • 载入a作为第二个操作数; 第二个操作数现在是 12
    • i (21) 添加到a (12) 得到33
  2. System.out.println(a+++++a);

    被解释为相同

    System.out.println(a+++++a);

    • 载入a作为第一个操作数; 第一个操作数现在是 10
    • 递增a后,它的值现在是11
    • 预增加a,它的值现在是12
    • 载入a作为第二个操作数; 第二个操作数现在是 12
    • 将两者相加得到22
  3. 有问题的 System.out.println(a+++++a);

    被解释为

    System.out.println((a++)++ +a);

    当您对整数文字调用后增量时,这会产生相同的错误。

关于java - 前缀和后缀运算符java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24974817/

相关文章:

java - 需要关闭 Logger 的处理程序

java - 锁定同步方法时访问类的非同步方法

java - 无法在我的独立 Java SE 应用程序中使用 Weld 进行上下文和依赖注入(inject) (CDI)

c++ - 在 C++ 中重载 << 运算符

python - "or"运算符不返回 bool 的动机是什么?

c++ - 后缀前缀运算符重载错误 C++

python - 黑客攻击Python : postfix arguments

java - 输入输出程序

c++ 转换运算符没有候选更好