为什么这个里面的NUM值没有改变?

新人小白。第一次接触JAVA ,为什么我在这里引用了foo方法后num值还是90?

public static void main(String[] args) {
    int num = 90;
    foo(num);
    System.out.println(num);
}
static void foo(int a) {
    a = 100;
    System.out.println(a);
}

在声明该变量时是在某个方法中,所以该变量为局部变量
因此在执行其他方法中将该变量作为参数传入之后更改该变量值不会对原本的变量起到影响。
如有问题请回复。

方式一

public class Demo {

    public static void main(String[] args) {

        int num = 1;
        num = add(num);

    }
    private static int add( int a) {
        // TODO Auto-generated method stub

        a = 100;

        return a;
    }

}

方式二

public class Demo {

    public int num = 1;

    public static void main(String[] args) {

        Demo demo = new Demo();

        demo.add(demo.num);

        System.out.println(demo.num);

    }
    private void add( int a) {
        // TODO Auto-generated method stub

        a += 100;

        System.out.println(a);
    }

}



因为你这个私有方法没有返回,所以修改并未对num生效。 将static 的void改为int,然后在输出后面加上 return a;

foo函数中的a相当于复制了一个num的值,在foo函数中操作,对num不会产生影响。你可以像上面老哥说的那么写,就会改变值。
public static void main(String[] args) {
int num=90;
num=foo(num);
System.out.println(num);
}
static int foo(int a){
a=a+10;
System.out.println(a);
return a;
}


基本数据类型:byte、short、int、long、float、double、char、boolean
引用类型:类(class)、接口(interface)、数组(array)
基本类型保存的值,引用类型保存了是对象的地址,所有基本类型赋值是按值传递(拷贝赋值),引用类型赋值是按引用传递。

因为Java方法是“值传递”,你的foo()方法只是把90这个值传过去了,并不是把num这个变量传过去的,如果你想通过方法改变值,那你就用int接受,并在方法里return.

你可以试试下面这两个方法更有意思:

public static void main(String[] args) {
    Map map = new HashMap();
    map.put("a",1);
    foo(map);
    System.out.println(map.get("a"));
    goo(map);
    System.out.println(map.get("a"));
}
static void foo(Map map) {
    map = new HashMap();
    map.put("a",2)
    System.out.println(map.get("a"));
}
static void goo(Map map){
    map.put("a",3);
    System.out.println(map.get("a"));
}