通俗易懂的解释Java是值传递还是引用传递?

首先介绍一下值传递与引用传递分别是什么?

在程序设计语言中将参数传给方法或函数的方式目前有两种(以前还有一种是名称传递,比如古老的Algol语言,这种方式已成为历史),一种是值传递,一种是引用传递。值传递表示将实参的值传递给方法;引用传递表示将实参的地址引用传递给方法。Java总是采用值传递的,Java程序中的方法得到的总是实参值的拷贝,下面用代码验证一下:

将基本数据类型Double传入方法:

public class ValueOrReference {
    public static void main(String[] args){
        double x = 10.0;
        System.out.println("执行方法前:"+ x);
        BasicDataType(x);
        System.out.println("执行方法后:"+ x);
    }

    public static void BasicDataType(Double x){
        x += 10;
    }
}

结果:

如果Java采用的是引用传递,执行方法后x的值就应该是20.0,而不是10.0,结果说明传入方法的是x的值。

将对象引用传入方法:

//首先定义一个Cat类
public class Cat {
    String name;
    public Cat(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
//下面是主函数:
public class ValueOrReference {
    public static void main(String[] args){
        Cat cat01 = new Cat("球球");
        Cat cat02 = new Cat("嘟嘟");
        System.out.println("执行方法前:\n"+"cat01:"+cat01+" name:"+cat01.getName()+"\ncat02:"+cat02+" name:"+cat02.getName());
        SwapCat(cat01,cat02);
        System.out.println("执行方法后:\n"+"cat01:"+cat01+" name:"+cat01.getName()+"\ncat02:"+cat02+" name:"+cat02.getName());
    }

    public static void SwapCat(Cat cat01,Cat cat02){
        Cat temp = cat01;
        cat01 = cat02;
        cat02 = temp;
        System.out.println("执行方法中:\n"+"cat01:"+cat01+" name:"+cat01.getName()+"\ncat02:"+cat02+" name:"+cat02.getName());
    }
}

结果:

执行完SwapCat方法前后,cat01和cat02的地址并没有发生交换,说明方法并没有改变对象的引用,由此可见Java不是引用传递;但为什么方法中的数据发生改变了呢?是因为Java是值传递,当参数为对象引用类型时,传入方法的是对象地址的拷贝值。

如有错误,敬请指正

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值