局部变量和全局变量

电玩女神 2022-06-04 09:18 357阅读 0赞

先来看一个简单的例子:

  1. public static void fun(int a){
  2. a=10;
  3. }
  4. public static void main(String[] args) {
  5. int a = 5;
  6. System.out.println(a);
  7. fun(a);
  8. System.out.println(a);
  9. }

结果

  1. 5
  2. 5

再来看个例子

  1. package binarytree;
  2. public class Stu {
  3. private String name;
  4. private int age;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. public void setAge(int age) {
  15. this.age = age;
  16. }
  17. public static void test(Stu stu){
  18. stu.setName("DDD");
  19. stu.setAge(18);
  20. }
  21. public static void test2(Stu stu){
  22. stu=null;
  23. }
  24. @Override
  25. public String toString() {
  26. return "Stu{" +
  27. "name='" + name + '\'' +
  28. ", age=" + age +
  29. '}';
  30. }
  31. public static void main(String[] args) {
  32. Stu stu = new Stu();
  33. test(stu);
  34. test2(stu);
  35. System.out.println(stu);
  36. }
  37. }

结果

  1. Stu{name='null', age=0}
  2. Stu{name='DDD', age=18}
  3. Stu{name='DDD', age=18}

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,357人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js 局部变量全局变量

    javascript有两种变量:局部变量和全局变量。当然,我们这篇文章是帮助大家真正的区别这两种变量。 首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个