java 数组的复制 clone()

在leetcode做算法题,挺简单的一个数组题,我的思路是对原数组进行递增排序形成一个新数组,然后比较原数组和新数组各个位置对应的元素有几个不同,下面是一开始写的算法,执行结果有问题,后来就输出了数组看了一下,发现 heights数组和target数组是一样的了,代码中数组的复制是有问题的

public int heightChecker(int[] heights) {
        int count= 0;
        int[] target = new int[heights.length];
        target = heights;
        for(int i=0;i<target.length-1;i++){
            for(int j=i+1;j<target.length;j++){
                if(target[i] > target[j]){
                    int temp = target[j];
                    target[j] = target[i];
                    target[i] = temp;
                }
            }
        }
        for(int i=0;i<heights.length;i++){
            if(heights[i] != target[i]){
               count++;
            }
        }
        return count;
    }

后来修改代码如下,执行成功

 public int heightChecker(int[] heights) {
        int count = 0;
        int[] target = heights.clone();
        Arrays.sort(target);
        for(int i=0;i<heights.length;i++){
            if(heights[i]!=target[i])
                count++;
        }
        return count;
    }

经过百度和看评论中的解析,找到了数组复制的一些结论如下
1、等号复制后修改原数组后会影响另一个数组
2、clone复制,对于数组本身而言,它的元素是引用类型(字符串除外)的时候,本来数组每个元素中保存的就是对象的引用,所以,拷贝过来的数组自然而言也是对象的引用,所以对于数组对象元素而言,它又是浅拷贝;
3、clone复制,对于引用类型(字符串除外),改变其中一个中的值,会影响另外一个值,相当于“浅拷贝”;
4、clone复制,对于值类型、字符串,改变其中一个中的值,不会影响另外一个值,相当于“深拷贝”;
参考文章:https://www.cnblogs.com/zhuanjiao/p/11874784.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值