黑马程序员技术交流社区
标题:
一个关于静态的小问题
[打印本页]
作者:
毕影彬
时间:
2012-11-6 11:50
标题:
一个关于静态的小问题
本帖最后由 毕影彬 于 2012-11-6 18:27 编辑
代码.jpg
(8.55 KB, 下载次数: 18)
下载附件
2012-11-6 11:49 上传
这段代码的执行结果是什么? 请说明原因。
作者:
朱宏青
时间:
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。
这里重点要说的是,假如代码改成这样:
class test4 {
static int x = 5;
public static void main(String[] args) {
change(x);
x++;
System.out.println(x);
}
static void change(int m){
x = m+2;
}
}
复制代码
结果又会如何呢?
因为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