java中三个加号(减号)的程序阅读题,你能做对吗?

本文通过两个程序实例探讨Java中涉及加号和减号的单目运算符优先级和结合性问题。在第一个例子中,解释了`m3 *= m1+++m2`的运算过程,得出`m3`的值为160。第二个例子展示了递归方法`testM`的执行逻辑,得出`testM(10)`的结果为5。同时,文章指出了常见误解和错误用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、
int m1=10,m2=10,m3=8;
m3 *= m1+++m2;  
System.out.println("m3:" + m3);

二、
int t = testM(10);
System.out.println("testM:" + t);

private int testM(int m) {
  //System.out.println("testm:" + m);
  if(1 > m)
   return 0;
  else
   return m---testM(m);// 如果改成m-(--testM(m))呢
 }

请大家想下运行的过程以及可能的结果


一、m3:160
解析:1)单目运算符优先级高于双目运算符
      2)++运算符从左到右结合
      m3 *= (m1++)+m2;//运算后m1的值是11了
      m3 *= 20;
      m3 = 8*20 = 160
错误理解:
1)m3 *= m1+(++m2);// 这样算出168
2) (m3*=m1++)+m2;//错误The left-hand side of an assignment must be a variable
3)(m3*=m1)+++m2;//错误1Invalid argument to operation ++/--,错误2Syntax error on token "+", invalid AssignmentOperator

二、testM:5
解析:原理和第一题一样
(m--)-testM(m);
testM(10) = 10 - testM(9) = 5
testM(9) = 9 - testM(8) = 5
testM(8) = 8 - testM(7) = 4
testM(7) = 7 - testM(6) = 4
testM(6) = 6 - testM(5) = 3
testM(5) = 5 - testM(4) = 3
testM(4) = 4 - testM(3) = 2
testM(3) = 3 - testM(2) = 2
testM(2) = 2 - testM(1) = 1
testM(1) = 1 - testM(0) = 1
错误理解:
1) m-(--testM(m))// Invalid argument to operation ++/--
2) m-testM(m);//testM(10) = 10 - testM(10) 栈溢出:java.lang.StackOverflowError

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值