首页 > 解决方案 > 阴影静态变量(全局变量)

问题描述

为什么在下一个代码中我得到 pro.x=11?。它应该是 22。请有人扔灯。

public class Pro {
    static int x=11;

    public static void main(String[] args)  {

    Pro pro=new Pro();
    pro.call(5);
    System.out.println(Pro.x);
    System.out.println(pro.x);  
    }
    public void call(int x){
        x=22;   
    }
}

标签: javastaticshadow

解决方案


您没有将静态/全局变量设置为 22,而是将传递的参数的值设置为。考虑到它是一个原始值,使用按值调用而不是按引用调用。

编辑:事实上,正如评论中所指出的,java 没有按引用调用,而是按引用值调用。

如果你只是想改变全局变量,你的函数不需要参数,你可以这样做:

public class Pro {
    static int x=11;

    public static void main(String[] args)  {

    Pro pro=new Pro();
    pro.call();
    System.out.println(Pro.x);
    System.out.println(pro.x);  
    }
    public void call(){
        Pro.x=22;   
    }
}

推荐阅读