Java是值传递还是引用传递?一文搞懂

微信公众号:Java随笔录
关注可了解更多Java相关的技术分享。问题或建议,欢迎公众号留言!

前言

今天聊一个很小的话题,值传递和引用传递。这个话题在其他高级语言中比较常见,但是在Java中,你一定听到过或者在网上看到过:“Java没有引用传递,只有值传递”。到底是怎么回事呢?今天就来聊一聊Java中的参数传递。

代码示例

这里通过一段简单的代码来一探究竟:

public class Test {

    private String str = new String("Java随笔录");
    private char[] chars = new char[] {'谢', '谢', '你'};
    private int num = 666;

    private void func(String _str, char[] _chars, int _num) {
        _str = "欢迎关注公众号: Java随笔录";
        _chars[0] = '感';
        _num = 888;
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.func(test.str, test.chars, test.num);

        System.out.println("str = " + test.str);
        System.out.println("chars = {" + test.chars[0] + ", " + test.chars[1] + ", " + test.chars[2] + "}");
        System.out.println("num = " + test.num);
    }

}

输出结果:

str = Java随笔录
chars = {,,}
num = 666

值传递?引用传递?

首先,小录很明确的告诉大家,在Java中只有值传递,没有引用传递!先明确这个点,再听我细细道来。

概念

值传递

方法调用时,实参的数值被复制到另一个变量,然后传递复制的对象。

引用传递

方法调用时,实际参数的地址直接传递到方法中。

对比
-值传递引用传递
区别创建副本不创建副本
实参是否改变函数中无法改变实际参数函数中可以改变原始实际参数
要点

所以说,值传递和引用传递的真正区别是:传递时,实际参数是否创建了副本。 不要去管参数是基本类型还是引用类型。

详解示例代码

在这里插入图片描述

为什么char数组中改变了?

因为实参和形参指向的是同一个数组对象,方法中改变的不是参数本身,而是改变了它所指向的对象。

错误的区分基本类型和引用类型

从上述示例代码可以看到,无论是String还是int,即使在方法中都进行改变,但实参都没有改变,所以和参数什么类型没有关系。

公众号

  • 关注公众号,即时接收关于Java的技术分享!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiangNanMax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值