刚开始学习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
?
有没有办法直接使用++
值?
答案 0 :(得分:10)
++x
不是x + 1
的快捷方式,它是x += 1
的快捷方式。也就是说,除了评估x+1
之外,它还将x
的值增加1。这意味着两件事:
x = ++x;
是多余的,因为++x;
本身已经完成同样的事情。++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);
}
这是输出: