java中的递增运算符

时间:2015-01-11 20:05:14

标签: java increment

刚开始学习java,所以抱歉问这么随意而愚蠢的事情......但是我不能用java包围增量运算符。

为什么这样做:

int a = 5;
int a = ++a;
System.out.println(a);

>>6

如果没有:

int a = ++5;
System.out.println(a);

>>Compilation error: Found value - Required variable.

此算子不应该像其他算术运算符一样工作吗?为什么这个特别需要一个变量?我的意思是a = 5+1;有效,为什么不a = ++5

有没有办法直接使用++值?

4 个答案:

答案 0 :(得分:10)

++x不是x + 1的快捷方式,它是x += 1的快捷方式。也就是说,除了评估x+1之外,它还将x的值增加1。这意味着两件事:

  1. x = ++x;是多余的,因为++x;本身已经完成同样的事情。
  2. ++1毫无意义,因为您无法更改1的值 - 它是一个常量。

答案 1 :(得分:3)

答案是++x 更改 x的值,并提供表达式结果。如果您尝试使用++5,则无法更改值5。

如果您想要一个“超过x”的值,并且您不需要更改实际存储在x中的值,那么通常的方法当然是x + 1

答案 2 :(得分:0)

如果有人有兴趣......

我听到原始问题背后的一个微弱的回声是"为什么这个运算符在这里?"。答案涉及一些计算历史。

数字设备公司创建了一台小型计算机 - 当时(大约在1970年左右),大多数计算机和#34;因为我们知道他们是Big Iron,IBM统治着计算机世界,DEC的小型机器是没有广泛分销的新兴企业。我相信美国政府当时只买了电脑和电脑。来自IBM,因此DEC称他们的机器"可编程数据处理器" (PDP)的。他们的PDP机器多年来一直是16位计算领域的领导者,尽管还有其他人。它们可以以不到一百万美元的价格购买!

他们的早期机器可供AT& T的一些研究人员使用;这些机器没有太多的操作系统或软件,研究人员开发了一种语言(名为C)和一种操作系统(Unix)。

从名为' a'的早期语言开始和研究人员正在开发一个"系统"语言,结构化汇编程序" - 它不是,也不应该是一个高水平的'语言,但可以用来编程这些较小,较慢的机器以获得高效代码,允许控制代码大小和速度低于FORTRAN和COBOL,但编程结构高于汇编程序。

PDP机器具有寻址模式,允许使用一个寄存器指向存储器块的开头,而另一个寄存器指向'' (是抵消)从第一个。当然,通常情况下,代码通过指针数组进行处理,依次对数组中的每个元素执行某些操作。因此,机器语言中存在一种寻址模式,允许从“当前”中的位置从存储器中获取值。在递增索引时数组的元素,所有这些都在一个机器语言指令中。

因此,C语言的开发人员将这种自动增量和自动减量构建到语言中,使编译器编写者有机会使用寻址模式从C代码生成比其他方式更高效的机器代码。操作员从C转到Java,它借用了很多C语法和操作符。

答案 3 :(得分:0)

因为 ++ i 前缀增量,它增加1然后在表达式中使用 i 的新值,但 i ++ 后缀增量,实际上是:使用 i 的当前值,然后将其增加1.这里您可以了解一些示例它更好:     public static void main(String [] args){

    int a = 3;
    int b = 5;
    System.out.println(++a);
    System.out.println(b++);
    System.out.println(b);

}

这是输出:

  • 4
  • 5
  • 6