我的Java老师说使用++n比n++更好,但我不明白其中的逻辑。有人知道吗?
我的Java老师说使用++n比n++更好,但我不明白其中的逻辑。有人知道吗?
++n
递增变量并返回新值。
n++
递增变量并返回旧的值。
因此,n++
需要额外的存储空间,因为它必须跟踪旧值,以便在递增完成后返回。
我预计这两者之间的实际差异现在可以忽略不计了。我知道许多编译器会优化它们,如果没有实际使用n++
的返回值,则它们将相同,但我不知道Java是否这样做。
n++
毫无疑问是绝对行业标准的原因是什么?就像没有人使用 ++n 一样,除非代码强制要求。 - Jonathon在日常实践中,我会根据代码中最有意义的内容使用前自增或后自增。"我们应该忘记小的效率问题,大约97%的时间:过早的优化是万恶之源"
唐纳德·克努斯
n++将在操作发生之前递增变量,而++n仅在操作后递增变量。
So take x = 1
y = x++
y = 1
x = 2 now
So take x = 1 again
y = ++x
y = 2
x = 2 now
例子:
int n = 10;
int a = n++; // a is 10
int b = n; // b is 11
int c = ++n; // c is 12
区别在于++n
的值是n + 1
,而n++
的值是n
。
两者都可以实现相同的功能,没有更好的一种。在程序中不应该依赖这两者的差异,因为1.) 相当多的人不理解它们的区别,2.) 同样的事情可以更简单地完成。
它们做不同的事情。
假设n = 10。那么n++会增加n的值,但返回10。
++n会增加n的值,并返回11。
虽然我不确定哪一个需要更多的汇编指令。
int a = 4;
int b = ++a;
System.out.println(a); // 5
System.out.println(b); // 5
int a = 4;
int b = a++;
System.out.println(a); // 5
System.out.println(b); // 4
一个有趣的例子可以说明它们之间的区别:
public class Main {
public static void main(String[] args) {
for (int i=0; i<5; /*not incrementing here*/ )
System.out.println(i++);
}
}
输出: 0 1 2 3 4
public class Main {
public static void main(String[] args) {
for (int i=0; i<5; /*not incrementing here*/ )
System.out.println(++i);
}
}
输出: 1 2 3 4 5
请注意,由于这里并不重要,因此两个for循环都没有执行递增操作。
++n会先将n加1,然后使用它; n++会先使用它,然后再加1。 --同理。