首页 > 试题广场 >

最后输出什么

[单选题]
 public void test() {
        int a = 10;
        System.out.println(a++ + a--);
    }
最后输出什么?
  • 19
  • 20
  • 21
  • 22

a++ 先把10赋值给a 再+1 所以左边是10 但此时a=11。右边a-- 也是先赋值 a=11,再-1。10+11=21 此时a=10。


编辑于 2019-09-19 15:21:37 回复(10)
发表于 2020-07-09 15:25:02 回复(8)
a++ + a-- 翻译过来等于
a++参与运算时是先运算再++ 
当a--时之前的++已经加好,所以a--时这个a是11,但是a--同a++一样所以整个等于是 10 + 11。
如果在 System.out.println(a++ + a--); 语句后再来个 System.out.println(a); 时,这个输出的是10。结果如图:
发表于 2020-08-04 14:22:10 回复(2)
a=10
(a++  +  a--)可以这样拆分:a++ 是先用后 +,因此a++ 为10;
a++ 之后使用了 + 这个运算符,因此 a - -  时,a的值已经变为了 11 ,
a - -是先用a的值再进行计算,因此 a - - 的值为a的值,还是11;
这时 a=11 ,(a++  +  a--)=(a   +  a+1) =21;

这里再举个例子:
(a ++    +    a--    +  a++)这个同理:
a++ 这个部分为先用后算:  10
a- -  这个部分为先用后算,因为这里用了,所以 a++  这里 a = a+1 = 11
a++ 这个部分先用后算,因为这里用了,所以前一次  a- - 这里 a = a - 1 = 10
如果之后要用,之前 a++  或者 a- - 中a的值就要进行计算,如果不用就一直等到下次用之前再计算,所以最终结果:   31 
编辑于 2021-07-16 10:01:50 回复(2)
后置运算符取当前值,然后再改变;前置运算符先改变,在获取当前值。
(a++ + a--)等于:
1.将a压栈(a=10)
2.a=a+1(a = 11)
3.运算符+压栈
4.将a压栈(a=11)
5.a=a-1(a=10)
发表于 2020-01-18 13:15:42 回复(0)
初始状态栈帧中的局部变量表中 a 的值为 20,执行 System.out.println(a++ + a--) 的时候首先将变量 a 压入操作数栈,再 +1,此时局部变量表中 a 的值为 11,再将此时的 a 压入操作数栈,再 -1,所以相加的结果为 21。
发表于 2020-07-01 18:40:50 回复(0)
a++
a是10 执行完a++那么就是11 故a--是11
也就是10+11
发表于 2019-09-24 18:18:27 回复(0)
第一步 a=10 
第二步 a=11
  10+11运算结果等于21
第三步 执行++ 
  运算结果等于22
第四部 执行--
  运算结果等于21
是这样吗?
编辑于 2021-11-09 22:57:39 回复(0)
a++ 先把10赋值给a 再+1 所以左边是10 但此时a=11。右边a-- 也是先赋值 a=11,再-1。10+11=21 此时a=10。
发表于 2021-11-08 08:27:23 回复(0)
a++是先把10赋值给a,再自增。此时a=11,右边a-- 也是先赋值再自减。因此10+11=21,此时a为10。此外++a是先自增后赋值
发表于 2021-10-16 18:54:16 回复(0)

上诉答案都不够明确,如果出现下面四组,同样的推论怕是得不到正确结果。

System.out.println(a++ + a--); //11+10=21 
System.out.println(a++ + --a); //11+9=20    
System.out.println(++a + --a); //11+10=21
System.out.println(++a + a--); //11+11=22

说到底还是符号在前先操作再用值,符号在后先赋值再操作的问题。

编辑于 2021-02-25 10:14:28 回复(2)
一开始 a++ = 10
然后 a-- ,这里第二次调用了a,所以等于是执行了a了这时候,就变成了11
所以最终结果是 11+a-- = 21
是这样吗,哈哈哈哈哈
发表于 2020-04-29 22:10:58 回复(0)
左结合 先算左边
发表于 2019-09-26 11:22:33 回复(1)
【原理分析,大彻大悟!】
算术运算式利用栈来运算的,所以当执行过程为:a入栈,+入栈,检测到下一个为+,+出栈,a出栈,取出a++的运算结果为10,10入栈,入栈完成后,a=a+1,完成a的加1操作。
此时栈只有 10,还剩下“+ a--”也是相同道理,注意a=11就好。
发表于 2022-06-14 11:26:43 回复(0)
哈哈哈,我来说一句
++和--放在右边的时候都是先参与表达式运算,再执行操作数加一的
所以!
a++参与运算是是10,然后自己执行加一,变成11
a--参与运算是是11,然后自己执行减一运算,变成10
所以是10+11 = =21~
发表于 2022-05-12 10:17:03 回复(0)
 0 bipush 10
 2 istore_1
 3 getstatic #2 <java/lang/System.out>
 6 iload_1      先从栈拿出a也就是10赋值 给 (a++)(记作x)
 7 iinc 1 by 1        a在栈内自增1 = 11
10 iload_1         在从栈拿出a也就是11赋值 给 (a--)(记作y)
11 iinc 1 by -1      a在栈内自减1 = 10
14 iadd                把xy相加 = 21
15 invokevirtual #3 <java/io/PrintStream.println>
18 return
发表于 2021-06-29 17:18:28 回复(0)
int a = 10;
a++ + a--
先使用a = 10 进行计算然后a= a+1
也就是10+a--     a = 11
a-- 同样 先用a计算 
10+11 = 21
发表于 2021-04-26 16:22:42 回复(0)
谭浩强出的?
发表于 2021-04-12 16:41:57 回复(0)
太坑了呀
发表于 2020-07-31 15:52:32 回复(0)
++自增符,在后,当然是后自增。 a++,先运算,运算结果为10,自增后a11。 然后a--同理,运算结果为11,自剪后11-1等于10
发表于 2020-07-06 08:16:19 回复(0)