java 中的递增运算符

increment operator in java

刚开始学习 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 无效?

有什么方法可以直接使用 ++ 值吗?

答案是++x改变x的值,同时提供一个表达式结果。如果您尝试使用 ++5.

,则无法更改 5 的值

如果你想要一个"one more than x"的值,并且你不需要改变实际存储在x中的值,那么通常的做法当然是[=15] =].

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

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

万一有人感兴趣...

我听到原始问题背后的微弱回声是 "Why is this operator here?"。答案涉及到一些计算历史。

Digital Equipment Corporation 创造了一种小型计算机——在当时(大约 1970 年),我们所知道的大多数 "computers" 都是 Big Iron,IBM 统治着计算世界,而 DEC 的小型计算机是新贵,没有分布广泛。我相信当时美国政府只从IBM购买了"computers",因此DEC称他们的机器为"programmable data processors"(PDP)。他们的 PDP 机器多年来一直是 16 位计算世界的领导者,尽管还有其他人。不到一百万美元就可以买到!

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

从早期命名为 'a' 和 'bcpl' 的语言开始,研究人员正在开发一种 "system" 语言,一种 "structured assembler" -- 它不是,也不意味着是一种 'high-level' 语言,而是一种可用于为这些更小、更慢的机器编写高效代码的语言,允许在低于 FORTRAN 和 COBOL 的水平上控制代码大小和速度,但具有编程结构高于汇编程序。

PDP 机器的寻址模式允许使用一个寄存器指向内存块的开头,另一个寄存器指向第一个寄存器的 'index'(偏移量)。当然,代码遍历数组(比方说指针)是很常见的,依次对数组中的每个元素执行某些操作。因此,机器语言中有一种寻址模式,允许从数组的 'current' 元素中的位置获取内存中的值,同时递增索引,所有这些都在一条机器语言指令中完成。

因此 C 语言的开发人员将这种自动递增和自动递减构建到语言中,使编译器编写者有机会使用寻址模式从 C 代码生成比其他方式更高效的机器代码。并且运算符从C继承到Java,大量借鉴了C的语法和运算符用法

因为 ++i 是一个 prefix increment ,它自增 1 然后使用 [=17= 的新值]i 在表达式中,但是 i++postfix increment 这实际上是:使用 的当前值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