Java 数组复制之clone方法
一、源码
- public class Test1 {
- public static void main(String[] args) {
- // Student[] arrs = new Student[] { new Student() { id = "22" } }; C# 可以简写法,Java不支持
- Student[] arrs = new Student[1];
- Student st = new Student();
- st.id = 12;
- st.name = "qwe";
- arrs[0] = st;
- Student[] arrss = arrs.clone();
- System.out.println(arrs == arrss);
- System.out.println(arrs.equals(arrss));
- arrss[0].id = 56;
- for (int i = 0; i < arrs.length; i++) {
- System.out.println(arrs[i].id + arrs[i].name);
- }
- for (int i = 0; i < arrss.length; i++) {
- System.out.println(arrss[i].id + arrss[i].name);
- }
- System.out.println("-------------自定义对象类型数组clone-------------");
- Student[] arrst1 = new Student[1];
- Student st1 = new Student();
- st1.id = 162;
- st1.name = "qkkj";
- arrst1[0] = st1;
- Student[] arrst2 = arrst1;
- System.out.println(arrst1 == arrst2);
- System.out.println(arrst1.equals(arrst2));
- arrst2[0].id = 996;
- for (int i = 0; i < arrst1.length; i++) {
- System.out.println(arrst1[i].id + arrst1[i].name);
- }
- for (int i = 0; i < arrst2.length; i++) {
- System.out.println(arrst2[i].id + arrst2[i].name);
- }
- System.out.println("-------------自定义对象类型数组= 赋值-------------");
- var arr1 = new String[] { "we", "dfeffg" };
- var arr = arr1.clone();
- System.out.println(arr1 == arr);
- System.out.println(arr1.equals(arr));
- arr[1] = "ddddddddddddddd";
- for (int i = 0; i < arr.length; i++) {
- System.out.println(arr[i]);
- }
- for (int i = 0; i < arr1.length; i++) {
- System.out.println(arr1[i]);
- }
- System.out.println("------------字符串数组clone--------------");
- var arr11 = new String[] { "we", "dfeffg" };
- var arr111 = arr11;
- System.out.println(arr111 == arr11);
- System.out.println(arr111.equals(arr11));
- arr111[1] = "ddddddddddddddd";
- for (int i = 0; i < arr11.length; i++) {
- System.out.println(arr11[i]);
- }
- for (int i = 0; i < arr111.length; i++) {
- System.out.println(arr111[i]);
- }
- System.out.println("------------字符串数组=赋值--------------");
- var arr2 = new int[] { 232, 45 };
- var arr3 = arr2.clone();
- System.out.println(arr2 == arr3);
- System.out.println(arr2.equals(arr3));
- arr3[1] = 4444;
- for (int i = 0; i < arr2.length; i++) {
- System.out.println(arr2[i]);
- }
- for (int i = 0; i < arr3.length; i++) {
- System.out.println(arr3[i]);
- }
- System.out.println("------------数字类型数组clone--------------");
- var arr4 = new int[] { 23432, 44455 };
- var arr5 = arr4;
- System.out.println(arr4 == arr5);
- System.out.println(arr4.equals(arr5));
- arr4[1] = 6666;
- for (int i = 0; i < arr4.length; i++) {
- System.out.println(arr4[i]);
- }
- for (int i = 0; i < arr5.length; i++) {
- System.out.println(arr5[i]);
- }
- System.out.println("------------数字类型数组=赋值-----------------");
- }
- }
- class Student {
- public int id;
- public String name;
- }
二、运行结果
- false
- false
- 56qwe
- 56qwe
- -------------自定义对象类型数组clone-------------
- true
- true
- 996qkkj
- 996qkkj
- -------------自定义对象类型数组= 赋值-------------
- false
- false
- we
- ddddddddddddddd
- we
- dfeffg
- ------------字符串数组clone--------------
- true
- true
- we
- ddddddddddddddd
- we
- ddddddddddddddd
- ------------字符串数组=赋值--------------
- false
- false
- 232
- 45
- 232
- 4444
- ------------数字类型数组clone--------------
- true
- true
- 23432
- 6666
- 23432
- 6666
- ------------数字类型数组=赋值-----------------
三、结果分析
1.clone复制,对于数组本身而言,它的元素是引用类型(字符串除外)的时候,本来数组每个元素中保存的就是对象的引用,所以,拷贝过来的数组自然而言也是对象的引用,所以对于数组对象元素而言,它又是浅拷贝;
2.clone复制,对于引用类型(字符串除外),改变其中一个中的值,会影响另外一个值,相当于“浅拷贝”;
3.clone复制,对于值类型、字符串,改变其中一个中的值,不会影响另外一个值,相当于“深拷贝”;
4.等号复值后修改一个后会影响另一个
Java 数组复制之clone方法的更多相关文章
- java数组复制的简单方法(一)
总结:主要是用a数组的长度等于b数组,然后a数组赋值给b数组,我不能想到这个办法,我还是不理解数组中length属性的含义 这里数组并没有正真复制过来,而是一个引用 package com.a; // ...
- Java数组的十大方法
Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5 ...
- java数组复制的方式和效率比较
java中,数组的复制有以下三种方式: 1. 调用System.arraycopy(Arrays.copyOfRange可以当作第四种,但是底层调用的是System.arraycopy,所以,认为是同 ...
- java 数组复制
http://www.cnblogs.com/zhengbin/p/5671403.html http://www.cnblogs.com/jjdcxy/p/5870524.html Java数组拷贝 ...
- java Object对象的clone方法
参考copy链接:http://blog.csdn.net/bigconvience/article/details/25025561 在看原型模式,发现要用到clone这个方法,以前和朋友聊过,没怎 ...
- Java数组操作十大方法 (转)
定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c&q ...
- Java 中如何使用clone()方法克隆对象?
java为什么要 对象克隆: 在程序开发时,有时可能会遇到以下情况:已经存在一个对象A,现在需要一个与A对象完全相同的B 对象,并对B 对象的属性值进行修改,但是A 对象原有的属性值不能改变.这时,如 ...
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...
- java数组复制的几种常见用法
1.1数组复制的几种常见用法 1.1.1System.arraycopy的用法 int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,1 ...
随机推荐
- windows上使用curl删除和查看ES索引
首先使用curl获取集群中可用的Elasticsearch索引列表: $ curl http://<node-ip|hostname>:9200/_cat/indices <node ...
- 从MAP角度理解神经网络训练过程中的正则化
在前面的文章中,已经介绍了从有约束条件下的凸优化角度思考神经网络训练过程中的L2正则化,本次我们从最大后验概率点估计(MAP,maximum a posteriori point estimate)的 ...
- MySQL -3- 基础应用
1.数值类型 TINYINT --极小整数SMALLINT --较小整数MEDIUMINT --中型整数INT --常规整数BIGINT --较大整数FLOAT --小型单精度DOUBLE --常规双 ...
- D - 秋实大哥与快餐店
秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- [..net core]4.入口,Main方法 及InProcess
通常控件台程序都有一个main方法, public class Program { public static void Main(string[] args) { CreateWebHostBuil ...
- C#获取主机信息
获取主机信息 最近需要做一个配合集控系统收集各个终端设备的一些信息,大致需要收集终端设备的硬件信息,CPU.内存以及硬盘使用率等信息.网上查看了一番,使用WMI来获取这些信息是最方便的.实现代码如下: ...
- scipy.spatial.distance.cdist
scipy.spatial.distance.cdist(XA, XB, metric='euclidean', p=2, V=None, VI=None, w=None)[source] Compu ...
- 初探CSS - 5 创建
CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档. 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet) 内部样式表(Interna ...
- Hive的架构(二)
02 Hive的架构 1.Hive的架构图 2.Hive的服务(角色) 1.用户访问接口 CLI(Command Line Interface):用户可以使用Hive自带的命令行接口执行Hive ...
- 【洛谷P3723】礼物
题目大意:给定两个序列 A.B,现可以将 A 序列的每一个元素的值增加或减少 C,求 \(\sum\limits_{i=0}^{n-1}(a_i-b_{i+k})^2\) 的最小值是多少. 题解:先不 ...