java中的值传递

  1. 无论是基本数据类型还是对象,在Java中都是通过值传递的。对于基本数据类型,传递的是值的副本拷贝,对参数的改变不会反映到原数据的值中。对于对象,传递的是对象的内存地址的副本拷贝,是内存地址的值
  2. 基本数据类型 a = 5,此时传给test方法是a的副本,注意并没有复制一个数值5,而是复制了变量a->副本a,这个副本a的值也是5;
    public class Test {
        public static void main(String[] args) {
            int a = 5;
            test(a);
            System.out.println(a); // 这将输出5,因为a的值没有被test方法改变
        }
    
        public static void test(int b) {
            b = 10; // 这里改变的是副本的值,不会影响原始变量a
        }
    }
  3. 引用数据类型,当使用String a = "hello";创建一个String对象,并且随后调用test(a)时,实际上传递的是对String对象引用的副本,而不是String对象内容的副本。对象的传递同样是对这个对象的引用的副本。两个引用指向的‘值’是同一个,因此调用到改变‘值’属性的方法时,是对同一个对象生效的;如果在方法中重新对引用赋值,改变的是副本的引用,此时再去修改内容,修改的就是新的对象内容,不会再影响原来的对象了;
        public static void main(String[] args) {
            String a = "hello";
            test(a);
            System.out.println(a); // 这将输出"hello",因为a引用的对象没有被test方法改变
            User u = new User();
            u.setAge(5);
            test(u);
            System.out.println(u.getAge()); // 这将输出15
        }
    
        public static void test(String b) {
            // b是a引用的一个副本,它们都指向同一个String对象
            b = "world"; // 这里改变的是b引用的对象,a引用的对象仍然是"hello"
        }
        public static void test(User c) {
            // c是u的副本,它们指向同一个user对象
            c.setAge(15); // 这里会改变user对象的age属性。
            c = new User();
            c.setAge(10);// 这里c被指向新的user对象了,此时设置了age=10,不影响u所指user对象的属性
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值