java的“=”问题

本文主要分析java的值传递的问题,废话少说!我们还是用例子来进行阐述吧:
现在是这样一个问题:比如我有一个a数组【1,5,2】还有个b数组,现在进行下面的操作:

public class Test{
    public static void main(String[] args) {
        int[] a = new int[]{1,5,2};
        int[] b = new int[3];
        b = a;
        a[0] = 777;
        System.out.println(Arrays.toString(b));
    }
}

我觉的看到这个问题,可能很多人都觉得蛮简单的,但其实这个问题还真不是一般人能够正确回答的,直接公布正确答案,输出的是[777,5,2],并不是[1,5,2]!
不信话,就把代码复制了自己运行看看,此时可能很多人才开始意识到这个问题的重要性,为什么我改变a数组的值,b数组也会跟着变???

现在进入正题
我们通过单步执行,来看看java是怎么处理那个赋值语句的

在这里插入图片描述

a和b都={int[3]@485}表明,两个数组指向的其实是相同的对象,所以无论改变哪一个数组,另一个数组也就会跟着变!这就是问题的所在!!

想到这里博主就开始有了个恐怖的想法,是不是java变量之间的赋值都是相当于引用操作!想到这里博主赶紧又写了一个测试代码:

public class Test{
    public static void main(String[] args) {
        int a=9;
        int b=a;
        a=1;
        System.out.println(b);
    }
}

由于受到上一个问题的干扰,此时我却认为答案是1,但结果再次让我大跌眼镜,这个时候改变a,对b是没有影响的。所以结果是9!!现在我得出结论,普通变量之间传递的是值,貌似只有数组传递的才是内存地址!

所以针对想要把a数组赋给b数组,且这两个互不影响,有三种可执行的方法:
1.利用循环遍历a数组,逐个逐个的将值赋给b数组!
2.采用语句b=a.clone();
3.采用语句System.arraycopy(a,0,b,0,a.length);

欢迎评论区提出不同意见,大家一起进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

键盘歌唱家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值