java数组克隆

看到网上很多讲述java数组克隆的文章,其中给出的例子都不是很完整,有很多不给解释说明,所以经常会让初学者误解。今天闲来无事就写了这么一个程序,请各位参考。

我给出的解释不是很多,但只强调两点:

1. 数组的结构:基本类型数组,仅是一个数组对象;对象类型的数组,是一个数组对象引用一系列对象。

2. 数组对象有 clone 方法,该方法是浅克隆。即:通过该方法返回的对象仅克隆数组对象,如果是对象类型的数组,并不克隆它引用的对象。

虽然下面的程序没有注释,但基于以上两点认识,就可以完整的理解程序。

Java代码 复制代码 收藏代码
  1. package org.joy.usmile;
  2. public class Main {
  3. public static void printArray(String head, int[] array) {
  4. System.out.print(head + " *==>");
  5. for (int a : array) {
  6. System.out.print(a);
  7. System.out.print("\t");
  8. }
  9. System.out.println();
  10. }
  11. public static <T> void printArray(String head, T[] array) {
  12. System.out.print(head + " ==>");
  13. for (T a : array) {
  14. System.out.print(a);
  15. System.out.print("\t");
  16. }
  17. System.out.println();
  18. }
  19. public static void main(String[] args) {
  20. test1();
  21. test2();
  22. test3();
  23. }
  24. private static void test1() {
  25. int[] a = { 1, 2, 3, 4, 5 };
  26. int[] b = new int[a.length];
  27. printArray("a : ", a);
  28. printArray("b : ", b);
  29. System.out.println();
  30. b = a.clone();
  31. printArray("a : ", a);
  32. printArray("b : ", b);
  33. System.out.println();
  34. b[0] = 100;
  35. printArray("a : ", a);
  36. printArray("b : ", b);
  37. System.out.println();
  38. }
  39. private static void test2() {
  40. Integer[] ao = { 1, 2, 3, 4, 5 };
  41. Integer[] bo = new Integer[ao.length];
  42. printArray("ao : ", ao);
  43. printArray("bo : ", bo);
  44. System.out.println();
  45. bo = ao.clone();
  46. printArray("ao : ", ao);
  47. printArray("bo : ", bo);
  48. System.out.println();
  49. bo[0] = 200;
  50. printArray("ao : ", ao);
  51. printArray("bo : ", bo);
  52. System.out.println();
  53. }
  54. private static void test3() {
  55. class Ox {
  56. public String name;
  57. public Ox(String name) {
  58. this.name = name;
  59. }
  60. @Override
  61. public String toString() {
  62. StringBuilder sb = new StringBuilder();
  63. sb.append("[");
  64. sb.append(this.name);
  65. sb.append("]");
  66. return sb.toString();
  67. }
  68. }
  69. Ox[] oa = { new Ox("a"), new Ox("b"), new Ox("c"), new Ox("c"),
  70. new Ox("d") };
  71. Ox[] ob = new Ox[oa.length];
  72. printArray("Ox a", oa);
  73. printArray("Ox b", ob);
  74. System.out.println();
  75. ob = oa.clone();
  76. printArray("Ox a", oa);
  77. printArray("Ox b", ob);
  78. System.out.println();
  79. ob[0] = new Ox("Love");
  80. printArray("Ox a", oa);
  81. printArray("Ox b", ob);
  82. System.out.println();
  83. ob[ob.length - 1].name = "[* U Joy *]";
  84. printArray("Ox a", oa);
  85. printArray("Ox b", ob);
  86. System.out.println();
  87. }
  88. }

posted on 2013-02-09 11:33  蜜雪薇琪  阅读(440)  评论(0编辑  收藏  举报