值传递与引用传递详解

本文探讨了Java中值传递和引用传递的概念。值传递涉及基本数据类型,函数内部的修改不会影响实际参数。引用传递则针对引用数据类型,如User类,函数内对参数的修改会直接影响实际对象。此外,特别指出String虽然是引用类型,但其值存于常量池,改变副本不会影响原始字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关于值传递

值传递:是指在调用函数时,将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,就不会影响到实际参数

如下图所示,当传递参数之前会将参数进行复制,函数中修改了参数,不会影响实际参数
在这里插入图片描述
值传递是对于是对基本数据而言,例如下面例子,number没有改变。

public class Test01 {
    public static void main(String[] args) {
        int number = 10;
        new Test01().change(number);
        System.out.println(number);
    }

    public void change(int a){
        a+=1;
    }
}

在这里插入图片描述

2、关于引用传递

引用传递:是指在调用函数时,将实际参数的地址传递到函数中,那么在函数中对参数进行修改,将会影响到实际参数

引用数据类型分为两个部分,引用变量和对象,这两个部分放在不同的地方,引用变量在栈中,而对象是放在堆内存中的,引用变量指向对象。
如下图所示,当传递参数之前会将参数进行复制,但是复制的是引用变量,复制后的引用变量还是指向内存中的同一对象,所以引用传递中,函数修改了参数会影响实际参数
在这里插入图片描述
引用传递是对于引用数据类型而言,例如对于User类姓名的修改,会改变对象的name。

public class Test01 {
    public static void main(String[] args) {
        User user = new User("小明", 12);
        new Test01().change(user);
        System.out.println(user);
    }

    public void change(User a){
        a.setName("小张");
    }
}

在这里插入图片描述


注意点,引用类型中的String的值是放在常量池中,我们改变副本的值不会影响到原来的值。
在这里插入图片描述

例如在change放发中改变了副本的值,但是原来的str字符串不会改变。

public class Test01 {
    public static void main(String[] args) {
        String str = "hello";
        new Test01().change(str);
        System.out.println(str);
    }

    public void change(String a){
        a="yes";
    }
}

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值