A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毕影彬 中级黑马   /  2012-11-6 11:50  /  1506 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毕影彬 于 2012-11-6 18:27 编辑

这段代码的执行结果是什么? 请说明原因。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 朱宏青 于 2012-11-6 13:37 编辑

让我测试下 请稍等

测试完毕(中途突然肚子疼去了下厕所= =)

结果明显是:6。

这里重点是关于change(int m)这个方法。

把x当做参数m传入到change这个方法里去后,这个m只是引用了x而已,无论如何操作,都不会改变x的值,而且对m的改变只在这个方法里有效,并且最后又没有返回回来。

而x++;这段代码的意思是x = x+1;将x加上1以后再赋给x,那这个x的值明显就发生了变化

所以最后等于6。

这里重点要说的是,假如代码改成这样:
  1. class test4 {
  2.         static int x = 5;
  3.         public static void main(String[] args) {
  4.                 change(x);
  5.                 x++;
  6.                 System.out.println(x);
  7.         }
  8.         static void change(int m){
  9.                 x = m+2;
  10.         }
  11. }
复制代码
结果又会如何呢?

因为x被static所修饰着,可以被全局调用,所以这个change方法里的x= m+2;实际也会对x的值产生改变。

所以最后的答案就变成了8。

所以不要搞错哦~

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 罗宝 于 2012-11-6 13:04 编辑

结果是6,
因为m是局部变量,它的作用区间只在change()中,
而调用change时只是给变量m传了一个值进去,并没有改变
变量x的值。之后执行(x++;)这条语句,使得x的值增加1,所
以最后结果是6。
回复 使用道具 举报
LS正解~~~
回复 使用道具 举报
change方法是传值,并不是给X赋值,而只有在x++的时候才给X赋值。
回复 使用道具 举报
m形参只是对x变量的一个拷贝,方法调用时,如果没有返回值并赋予给x变量,x的值是不会改变,改变的只是m局部变量,它的作用域只是在方法内有效。
回复 使用道具 举报
结果肯定是6了
x是变量,指向5  调用change(x);只是把值5传入进去,函数内没有对x进行操作。
所以 结果自然是6了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马