[知识学习]java中clone()的机制

今天写程序时发现,当String数组A在用Clone()方法将A的内容克隆给另一个String数组B时,此时得到的数组B的地址指向的是一个新的地址。既不是A的地址,也不是原来B的地址。这说明在调用Clone()方法时,该方法在后台创建了一个新的对象。

举个例子:

 public static void main(String [] args){
    		String [] A = {"aa","bb"};
            String [] B = new String [2];
            System.out.println("A的地址是: "+A);
            System.out.println("复制前B的地址是: "+B);
            B = A;
            System.out.println("A直接赋给B时,B的地址是: "+B);
            B = A.clone();
            System.out.println("Aclone给B时,B的地址是: "+B);
    }
输出结果为:

A的地址是: [Ljava.lang.String;@15bc6c8
复制前B的地址是: [Ljava.lang.String;@578073
A直接赋给B时,B的地址是: [Ljava.lang.String;@15bc6c8
Aclone给B时,B的地址是: [Ljava.lang.String;@b20352

查看了一下Api:Object 类的 clone 方法执行 特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意,所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我复制。


Object类中定义了clone()方法。对数组进行克隆。举例:

public static void main(String args[]){
  int a[]=new int[5];
  int b[]=new int[6];
  Arrays.fill(b,1);
  a=b.clone();
  System.out.println(Arrays.toString(a));
}
输出结果是: 1 1 1 1 1 1

克隆不仅是拷贝内容,还会把结构也给改掉。声明的数组a 只有5个内存空间,将b克隆赋给a后 b的数组大小也变为6了。可见clone方法时直接创建了新的对象。

对常量数组做如下测试:

final int a[] = new int[5];
  int b[]=new int[6];
  Arrays.fill(b,1);
  a=b.clone();
  System.out.println(Arrays.toString(a));
输出结果一样。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值