Java算术运算' - '运算符

时间:2013-01-09 20:39:36

标签: java eclipse

我想了解index = index--;index=--index;之间的区别我在下面的代码块(第一个示例)中检查了index = index--;赋值的输出:

public static void main(String[] args) {
    int index = 10;
    for (int i = 0; i < 10; i++) {
        index = index--;
        System.out.println("Index:" + index);
    }//end of for loop
}// end of main method

输出:

Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10

当我使用index=--index;作业(第二个示例)

public static void main(String[] args) {
        int index = 10;
        for (int i = 0; i < 10; i++) {
            index = --index;
            System.out.println("Index:" + index);
        }
    }// end of main method

输出:

Index:9
Index:8
Index:7
Index:6
Index:5
Index:4
Index:3
Index:2
Index:1
Index:0

我有两个问题。在第二个示例中,Eclipse抛出一个警告:赋值index = --index;(赋值给变量索引没有效果)但实际上它确实对变量有影响。它将其值减少1.为什么Eclipse会发出这样的警告消息?

在第一个示例中,变量不受操作的影响(Eclipse不提供警告)。我想知道为什么Eclipse没有消息,我不明白为什么这个赋值对变量索引没有影响index = index--;

6 个答案:

答案 0 :(得分:4)

问题在于评估作业的方式。执行index = index--时,首先评估作业的右侧。含义:

  1. 右侧index的返回值
  2. 降低index
  3. 的值
  4. index的值设置为右侧的值(这是index的原始值,因为它是先返回的)

答案 1 :(得分:3)

=--都会改变index的值。对于Java,--保证在=之前发生,因此在index = index--;的情况下,--的返回值是index的旧值。 1}}并覆盖index的减量,而在index = --index;的情况下,--的返回值已经是index的新值,因此赋值没有效果, index保持递减。

请注意,在C中,语句index = index--;具有未定义的行为,并且允许编译器递减索引,忽略它或编写重新格式化硬盘的代码(尽管后一种情况极不可能)。

答案 2 :(得分:1)

index = index--;

首先将值分配给左侧的索引,然后执行--,结果将分配给任何变量(在内存中省略)。

例如:

   index =10;

   index = index--;

首先将值10赋给变量索引,它变为

 `10--;`

观察没有指向上述语句的变量。现在10--将结果为9并在内存中省略,但索引变量仍将指向10,这是在步骤1中分配的。

答案 3 :(得分:1)

1)index--是后缀操作。这意味着,您的作业index = index--会将index的先前值赋予相同的index变量。即index值不会更改。

2)--index是前缀操作。这意味着,首先index将被减少,然后将被分配到相同的index变量。

答案 4 :(得分:1)

修复后的操作符(--)在你正在做的任何事情之后发生。所以:

index = index--;

  1. 获取index的值并将其放入临时变量(register)
  2. 将该寄存器值指定为索引
  3. 减少临时寄存器(然后丢弃,因为没有用它做任何事情。)
  4. index =-- index;

    1. 获取索引的值并将其放入临时寄存器
    2. 递减寄存器
    3. 将该注册值分配给索引
    4. 请注意,这些是等效的:

      index =-- index; index = --index;

答案 5 :(得分:0)

index = index - ;

转换为:

int temp = index;
index = temp;
temp = temp - 1;

<击>

Gah,我知道我弄错了。正确翻译如下:

int temp = index; 
index = index - 1; 
index = temp; 

信用:https://stackoverflow.com/users/1810525/mel-nicholson