黑马程序员技术交流社区

标题: 一个关于静态的小问题 [打印本页]

作者: 毕影彬    时间: 2012-11-6 11:50
标题: 一个关于静态的小问题
本帖最后由 毕影彬 于 2012-11-6 18:27 编辑

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

作者: 朱宏青    时间: 2012-11-6 12:46
本帖最后由 朱宏青 于 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。

所以不要搞错哦~
作者: 罗宝    时间: 2012-11-6 13:00
本帖最后由 罗宝 于 2012-11-6 13:04 编辑

结果是6,
因为m是局部变量,它的作用区间只在change()中,
而调用change时只是给变量m传了一个值进去,并没有改变
变量x的值。之后执行(x++;)这条语句,使得x的值增加1,所
以最后结果是6。
作者: 葬天    时间: 2012-11-6 13:07
LS正解~~~
作者: 马纵驰    时间: 2012-11-6 13:17
change方法是传值,并不是给X赋值,而只有在x++的时候才给X赋值。
作者: 卜永富    时间: 2012-11-6 13:25
m形参只是对x变量的一个拷贝,方法调用时,如果没有返回值并赋予给x变量,x的值是不会改变,改变的只是m局部变量,它的作用域只是在方法内有效。
作者: 齐连涛    时间: 2012-11-6 18:24
结果肯定是6了
x是变量,指向5  调用change(x);只是把值5传入进去,函数内没有对x进行操作。
所以 结果自然是6了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2