i++
当我偶然发现时,我感到很困惑i+++[another expression]
。我去在DrJava中测试了它:
> int i;
> i++
0
> i+++1
2
> i+++1
3
> i+++2
5
> i+++1
5
> ++i+1
7
> ++i+1
8
> ++i+1
9
> ++i+2
11
后来,我这样做了:
> int i;
> i+++(++i);
> System.out.print(i);
2
> System.out.print(i);
2
> i+++(++i);
> System.out.print(i);
4
> i+++(++i);
> System.out.print(i);
6
我得出的结论是,返回的值是i ++和另一个变量的加法。但是i +++(++ i)呢?那里发生了什么事?最重要的是,为什么我要(或不想)在我的代码中使用它?
i+++(++i)
我们可以将其重写为
(i++) + (++i)
请注意,i++
增加i
并返回i
的初始值,而++i
增加i
并返回i
的新值。
因此,对于i = 3
,i++
递增i
至,4
然后返回3
。++i
然后递增i
到5
并返回5
。因此,结果是8
。i
的最终值是5
,因为它增加了两次:
int i = 3;
System.out.println(i+++(++i));
System.out.println(i);
8 5
有时将其视为字节码会有所帮助:
ILOAD 1 // load i
IINC 1 1 // increment i
IINC 1 1 // increment i
ILOAD 1 // load new i (i.e. initial i + 2)
IADD // add top two values on stack: i and (i + 2)
最重要的是,为什么我要(或不想)在我的代码中使用它?
永远不要在自己的代码中做类似这样的事情。将其分解成较小的,可理解的部分,而不是全部完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句