首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java算术运算'--‘运算符

Java算术运算'--‘运算符
EN

Stack Overflow用户
提问于 2013-01-10 04:39:36
回答 5查看 346关注 0票数 2
代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10
Index:10

当我使用index=--index;赋值(第二个例子)

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
Index:9
Index:8
Index:7
Index:6
Index:5
Index:4
Index:3
Index:2
Index:1
Index:0

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-10 04:44:42

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-01-10 04:42:20

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

  1. 右侧index的返回值
  2. indexindex
  3. Set值减为右侧的值( index的原始值,因为是先返回的)
票数 4
EN

Stack Overflow用户

发布于 2013-01-10 04:41:12

代码语言:javascript
复制
index = index--;

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

例如:

代码语言:javascript
复制
   index =10;

   index = index--;

首先将值10赋给变量index,它变成

代码语言:javascript
复制
 `10--;`

注意到没有指向上述语句的变量。现在10--结果是9,不在内存中,但是索引变量仍然指向10,这是在step1中分配的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14246036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档