局部变量和全局变量
程序员文章站
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,这两个引用变量本身在内存中是两个不同的东西,这两个变量相互独立,其中一个变量的自身的改变不会影响到另一个变量,但是这两个引用变量都指向同一个内容,其中人一个引用变量对这个指向内容分的修改都是有效的。