老师好,为什么静态变量传值会被影响?
public class ReferenceDemo { static int a=1; public void add() { this.a++; } public static void main(String [] args) { System.out.println(a); new ReferenceDemo().add(); System.out.println(a); } }
结果为:
1
2
登陆购买课程后可参与讨论,去登陆吧
同学你好,老师没有理解同学的疑问,建议同学细致描述一下问题。
同学提供的代码中,执行顺序如下:
1.当类加载时,a变量被初始化为1;
2.当执行第7行时,打印输出1;
3.当执行第8行时,通过add方法对a变量的值进行了改变,从1变为2;
4.当执行第9行时,打印出输出改变后的结果,即2。
静态变量的特点:当通过任意方法将其值进行改变后,都会永久改变变量的值。
祝学习愉快~
如课程所说,
在方法传值中普通变量传值传的是字面值,而不传地址,所以不会影响主方法中的值。
在数组传值中,是传指针(地址),所以方法中数组的改变会影响主方法。
那静态变量传的是地址吗?(静态变量的特点:当通过任意方法将其值进行改变后,都会永久改变变量的值。)
同学你好,上述代码示例中不涉及到值传递问题,而是直接在add()方法中修改了静态变量的值。
同学可回顾下值传递相关课程:https://class.imooc.com/lesson/2056#mid=48830
也可使用如下代码测试值传递问题:
public class ReferenceDemo { static int a = 1; public void add() { a++; } public void add(int a) { a++; System.out.println("add(int a)中局部变量a的值" + a);//3 } public static void main(String[] args) { System.out.println("add()方法调用前静态变量a的值" + ReferenceDemo.a);//1 new ReferenceDemo().add(); System.out.println("add()方法调用后静态变量a的值" + ReferenceDemo.a);//2 System.out.println("----------"); System.out.println("add(int a)方法调用前静态变量a的值" + ReferenceDemo.a);//2 new ReferenceDemo().add(a); //值传递 System.out.println("add(int a)方法调用后静态变量a的值" + ReferenceDemo.a);//2 } }
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
登录后可查看更多问答,登录/注册
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
79 1
56 1
9 1
14 1
56 9
在线咨询
领取优惠
免费试听
领取大纲
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星