欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

局部变量和全局变量

程序员文章站 2024-01-26 08:55:17
...

先来看一个简单的例子:

    public static void fun(int a){
        a=10;
    }

    public static void main(String[] args) {
        int a = 5;
        System.out.println(a);
        fun(a);
        System.out.println(a);
    }

结果

5
5

再来看个例子

package binarytree;

public class Stu {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void test(Stu stu){
        stu.setName("DDD");
        stu.setAge(18);
    }
    public static void test2(Stu stu){
       stu=null;
    }

    @Override
    public String toString() {
        return "Stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public static void main(String[] args) {
        Stu stu = new Stu();
        test(stu);
        test2(stu);
        System.out.println(stu);
    }
}

结果

Stu{name='null', age=0}
Stu{name='DDD', age=18}
Stu{name='DDD', age=18}

解释:
fun(a);
  局部变量只在函数范围内起作用,函数内的变量a和主函数的变量a是两个东西,不是同一个,无论函数内参数a如何变化,都不会影响主函数中的变量a。

test(stu);test2(stu);同样如此。

那为什么test(stu);起作用了呢,
  是这样的:主函数有个引用变量stu,test(stu)函数也有个引用变量stu,这两个引用变量本身在内存中是两个不同的东西,这两个变量相互独立,其中一个变量的自身的改变不会影响到另一个变量,但是这两个引用变量都指向同一个内容,其中人一个引用变量对这个指向内容分的修改都是有效的。