(注意:我偶然发现了这个,所以它可能不太实用,但我只是很好奇)
我希望在递增第二个值后打印出一个值,即两个值的总和.像这样的东西:
int first = 10;
int second = 20;
System.out.println(first + ++second); //31
System.out.println(first); //10
System.out.println(second); //21
Run Code Online (Sandbox Code Playgroud)
也许不是最新的代码,但它有效.但后来,我开始尝试.
System.out.println(first +++ second); //30
System.out.println(first); //11
System.out.println(second); //21
Run Code Online (Sandbox Code Playgroud)
没关系; 它意味着第一个在添加后增加,并且这里可以忽略空格.凉.但是之后...
System.out.println(first +++++ second); //"Invalid Argument", doesn't work
Run Code Online (Sandbox Code Playgroud)
而
System.out.println(first ++ + ++ second); //31
System.out.println(first); //11
System.out.println(second); //21
Run Code Online (Sandbox Code Playgroud)
工作正常,但由于某种原因,仍然不同
System.out.println(first + + + ++ second); //31
System.out.println(first); //10
System.out.println(second); //21
Run Code Online (Sandbox Code Playgroud)
也许是最奇怪的,
System.out.println(first + + + + + + second); //30
System.out.println(first); //10
System.out.println(second); //20
Run Code Online (Sandbox Code Playgroud)
那么这里发生了什么?何时忽略运算符之间的空格,何时不是?为什么我可以写"+ + + + +",没有任何问题?
谢谢!
这归结为运营商优先权.操作顺序如下:
foo++,foo--)++foo,--foo, +expr,...)+,-)那么,让我们来看看每个表达式:
first + ++second是first + (++second).没关系.
first +++ second是的(first++) + second,就像你说的那样有效.
first +++++ second是((first ++)++)+ second),但是(first ++)是一个值(不是变量),因此不能递增 - 这就是错误试图告诉你的.
first ++ + ++ second明确告诉Java以不同于上面的方式进行拆分:它变得(first ++) + (++ second)很好.
first + + + + + + second成为first + (+ (+ (+ (+ (+ second))))).一元+只是意味着"没有否定",所以+foo == foo.因此,这个表达式简化为first + second,显然很好.
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |