2

我试图了解两者之间的区别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 抛出一个警告: assignment index = --index;(The assignment to variable index has no effect) 但实际上它确实对变量有影响。它的值减 1。为什么 Eclipse 会给出这样的警告信息?

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

4

6 回答 6

4

问题是评估分配的方式。当你做index = index--右边的作业时,首先评估。意义:

  1. index右侧的返回值
  2. 降低价值index
  3. 将 value of 设置index为右侧的值(这是原始值 ofindex因为它是最先返回的)
于 2013-01-09T20:42:20.373 回答
4

=和改变--的值index。在 Java 的情况下,--保证在 之前发生=,所以在index = index--;返回值的情况下--是旧值index并覆盖的减量,index而在index = --index;返回值的情况下--已经是的新值index所以分配没有效果并index保持递减。

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

于 2013-01-09T20:44:42.397 回答
1
index = index--;

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

例如:

   index =10;

   index = index--;

首先将值 10 分配给变量索引,它变成

 `10--;`

观察没有指向上述语句的变量。现在 10-- 将导致 9 并留在内存中,但索引变量仍将指向在 step1 中分配的 10。

于 2013-01-09T20:41:11.887 回答
1

1)index--是后缀操作。这意味着,您的分配index = index--会将先前的值赋给index同一个index变量。即index值不会改变。

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

于 2013-01-09T20:42:44.877 回答
1

后修复运算符 ( --) 发生在您所做的任何事情之后。所以:

index = index--;

  1. 获取 index 的值并将其放入临时变量(寄存器)中
  2. 将该寄存器值分配给索引
  3. 递减临时寄存器(然后将其丢弃,因为没有对其进行任何处理。)

index =-- index;

  1. 获取索引的值并将其放入临时寄存器
  2. 减少寄存器
  3. 将该寄存器值分配给索引

请注意,这些是等效的:

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

于 2013-01-09T20:43:52.130 回答
0

指数=指数--;

转换为:

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

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

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

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

于 2013-01-09T20:42:53.477 回答