我想了解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--;
答案 0 :(得分:4)
问题在于评估作业的方式。执行index = index--
时,首先评估作业的右侧。含义:
index
的返回值index
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--;
index =-- index;
请注意,这些是等效的:
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;