Java 数组复制clone方法实现详解

前端之家收集整理的这篇文章主要介绍了Java 数组复制clone方法实现详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这篇文章主要介绍了Java 数组复制clone方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、源码

  1. public class Test1 {
  2. public static void main(String[] args) {
  3. // Student[] arrs = new Student[] { new Student() { id = "22" } }; C# 可以简写法,Java不支持
  4. Student[] arrs = new Student[1];
  5. Student st = new Student();
  6. st.id = 12;
  7. st.name = "qwe";
  8. arrs[0] = st;
  9. Student[] arRSS = arrs.clone();
  10. System.out.println(arrs == arRSS);
  11. System.out.println(arrs.equals(arRSS));
  12. arRSS[0].id = 56;
  13. for (int i = 0; i < arrs.length; i++) {
  14. System.out.println(arrs[i].id + arrs[i].name);
  15. }
  16. for (int i = 0; i < arRSS.length; i++) {
  17. System.out.println(arRSS[i].id + arRSS[i].name);
  18. }
  19. System.out.println("-------------自定义对象类型数组clone-------------");
  20.  
  21. Student[] arrst1 = new Student[1];
  22. Student st1 = new Student();
  23. st1.id = 162;
  24. st1.name = "qkkj";
  25. arrst1[0] = st1;
  26. Student[] arrst2 = arrst1;
  27. System.out.println(arrst1 == arrst2);
  28. System.out.println(arrst1.equals(arrst2));
  29. arrst2[0].id = 996;
  30. for (int i = 0; i < arrst1.length; i++) {
  31. System.out.println(arrst1[i].id + arrst1[i].name);
  32. }
  33. for (int i = 0; i < arrst2.length; i++) {
  34. System.out.println(arrst2[i].id + arrst2[i].name);
  35. }
  36. System.out.println("-------------自定义对象类型数组= 赋值-------------");
  37.  
  38. var arr1 = new String[] { "we","dfeffg" };
  39. var arr = arr1.clone();
  40. System.out.println(arr1 == arr);
  41. System.out.println(arr1.equals(arr));
  42. arr[1] = "ddddddddddddddd";
  43. for (int i = 0; i < arr.length; i++) {
  44. System.out.println(arr[i]);
  45. }
  46. for (int i = 0; i < arr1.length; i++) {
  47. System.out.println(arr1[i]);
  48. }
  49. System.out.println("------------字符串数组clone--------------");
  50.  
  51. var arr11 = new String[] { "we","dfeffg" };
  52. var arr111 = arr11;
  53. System.out.println(arr111 == arr11);
  54. System.out.println(arr111.equals(arr11));
  55. arr111[1] = "ddddddddddddddd";
  56. for (int i = 0; i < arr11.length; i++) {
  57. System.out.println(arr11[i]);
  58. }
  59. for (int i = 0; i < arr111.length; i++) {
  60. System.out.println(arr111[i]);
  61. }
  62. System.out.println("------------字符串数组=赋值--------------");
  63.  
  64. var arr2 = new int[] { 232,45 };
  65. var arr3 = arr2.clone();
  66. System.out.println(arr2 == arr3);
  67. System.out.println(arr2.equals(arr3));
  68. arr3[1] = 4444;
  69. for (int i = 0; i < arr2.length; i++) {
  70. System.out.println(arr2[i]);
  71. }
  72. for (int i = 0; i < arr3.length; i++) {
  73. System.out.println(arr3[i]);
  74. }
  75. System.out.println("------------数字类型数组clone--------------");
  76.  
  77. var arr4 = new int[] { 23432,44455 };
  78. var arr5 = arr4;
  79. System.out.println(arr4 == arr5);
  80. System.out.println(arr4.equals(arr5));
  81. arr4[1] = 6666;
  82. for (int i = 0; i < arr4.length; i++) {
  83. System.out.println(arr4[i]);
  84. }
  85. for (int i = 0; i < arr5.length; i++) {
  86. System.out.println(arr5[i]);
  87. }
  88. System.out.println("------------数字类型数组=赋值-----------------");
  89. }
  90. }
  91.  
  92. class Student {
  93. public int id;
  94. public String name;
  95. }

二、运行结果

  1. false
  2. false
  3. 56qwe
  4. 56qwe
  5. -------------自定义对象类型数组clone-------------
  6. true
  7. true
  8. 996qkkj
  9. 996qkkj
  10. -------------自定义对象类型数组= 赋值-------------
  11. false
  12. false
  13. we
  14. ddddddddddddddd
  15. we
  16. dfeffg
  17. ------------字符串数组clone--------------
  18. true
  19. true
  20. we
  21. ddddddddddddddd
  22. we
  23. ddddddddddddddd
  24. ------------字符串数组=赋值--------------
  25. false
  26. false
  27. 45
  28. 4444
  29. ------------数字类型数组clone--------------
  30. true
  31. true
  32. 6666
  33. 6666
  34. ------------数字类型数组=赋值-----------------

三、结果分析

  1.clone复制,对于数组本身而言,它的元素是引用类型(字符串除外)的时候,本来数组每个元素中保存的就是对象的引用,所以,拷贝过来的数组自然而言也是对象的引用,所以对于数组对象元素而言,它又是浅拷贝;

  2.clone复制,对于引用类型(字符串除外),改变其中一个中的值,会影响另外一个值,相当于“浅拷贝”;

  3.clone复制,对于值类型、字符串,改变其中一个中的值,不会影响另外一个值,相当于“深拷贝”;

  4.等号复值后修改一个后会影响另一个

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

猜你在找的Java相关文章