zoukankan      html  css  js  c++  java
  • java中的值传递和引用传递

    public class Test3 {
        public static void change(int a){
            a=50;
        }
        public static void main(String[] args) {
            int a=10;
            System.out.println(a);
            change(a);
            System.out.println(a);
        }
    }

    输出的 是10,10。main方法中将a传递给change方法,change方法中会对传递过来的参数进行copy,所以change中的a是实参复制出来的一个变量。change中的a的改变与实参无关。
    public class Test3 {
        public static void change(int []a){
            a[0]=50;
        }
        public static void main(String[] args) {
            int []a={10,20};
            System.out.println(a[0]);
            change(a);
            System.out.println(a[0]);
        }
    }

    输出结果为10   50。实际传递的是引用的地址值。形参获取到实参所指向的地址的指针。改变形参的值相当于改变实参指向地址的值,所以实参指向的值会改变。

    class Emp {
        public int age;
    }
    public class Test {
        public static void change(Emp emp)
        {
            emp.age = 50;
            emp = new Emp();//再创建一个对象
            emp.age=100;
        }
        
        public static void main(String[] args) {
            Emp emp = new Emp();
            emp.age = 100;
            System.out.println(emp.age);
            change(emp);
            System.out.println(emp.age);
            System.out.println(emp.age);
        }
    }
    复制代码

    输出为:100  50  50.

    首先,方法中改变了对象的值,所以age为50,然后创建了一个新的对象,新的对象的指针放在了emp里。这时的emp和传递过来的emp所指向的地址不同了。最后设置age为100,是对新建的Emp对象的设置。也就是说,后来新建的emp相当于change方法中的私有变量,作用域只在change方法里。而传递过来的emp的指针是不会改变的。所以打印的emp是实参指向的空间。

  • 相关阅读:
    CODE[VS] 1018 单词接龙
    Linux提示BOOT空间不足问题
    CODE[VS] 1017 乘积最大
    关于printf输出结果的一些问题
    CODE[VS] 1220 数字三角形
    redux
    Promise面试题
    学习Promise笔记
    js 事件委托 事件代理
    前端通信、跨域
  • 原文地址:https://www.cnblogs.com/BlingSun/p/7485355.html
Copyright © 2011-2022 走看看