静态变量传值会被影响

静态变量传值会被影响

老师好,为什么静态变量传值会被影响?

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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-12-27 15:01:21

同学你好,老师没有理解同学的疑问,建议同学细致描述一下问题。

同学提供的代码中,执行顺序如下:

1.当类加载时,a变量被初始化为1;

2.当执行第7行时,打印输出1;

3.当执行第8行时,通过add方法对a变量的值进行了改变,从1变为2;

4.当执行第9行时,打印出输出改变后的结果,即2。

静态变量的特点:当通过任意方法将其值进行改变后,都会永久改变变量的值。

祝学习愉快~

  • 提问者 何艾莉 #1

    如课程所说,

    在方法传值中普通变量传值传的是字面值,而不传地址,所以不会影响主方法中的值。

    在数组传值中,是传指针(地址),所以方法中数组的改变会影响主方法。

    那静态变量传的是地址吗?(静态变量的特点:当通过任意方法将其值进行改变后,都会永久改变变量的值。


    2022-12-28 09:20:18
  • 好帮手慕小小 回复 提问者 何艾莉 #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
        }
    }

    祝学习愉快~

    2022-12-28 10:12:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师