• 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是实参指向的空间。

  • 相关阅读:
    Java学习笔记
    计算机基础知识点整理
    codeblock的GUN GCC compiler问题
    秋招小米面经
    闭包的特性(只做了粗略整理)
    overflow:hidden为什么可以清除浮动?
    项目中出现的问题
    MySql 备忘还原数据库
    MySql语句备忘 JSON截取
    MySql语句备忘 UPDATE
  • 原文地址:https://www.cnblogs.com/BlingSun/p/7485355.html
Copyright © 2020-2023  润新知