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. }
package org.joy.usmile;

public class Main {

	public static void printArray(String head, int[] array) {
		System.out.print(head + " *==>");
		for (int a : array) {
			System.out.print(a);
			System.out.print("\t");
		}
		System.out.println();
	}

	public static <T> void printArray(String head, T[] array) {
		System.out.print(head + " ==>");
		for (T a : array) {
			System.out.print(a);
			System.out.print("\t");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		test1();
		test2();
		test3();
	}

	private static void test1() {
		int[] a = { 1, 2, 3, 4, 5 };
		int[] b = new int[a.length];

		printArray("a : ", a);
		printArray("b : ", b);
		System.out.println();

		b = a.clone();

		printArray("a : ", a);
		printArray("b : ", b);
		System.out.println();

		b[0] = 100;

		printArray("a : ", a);
		printArray("b : ", b);
		System.out.println();
	}

	private static void test2() {
		Integer[] ao = { 1, 2, 3, 4, 5 };
		Integer[] bo = new Integer[ao.length];

		printArray("ao : ", ao);
		printArray("bo : ", bo);
		System.out.println();

		bo = ao.clone();

		printArray("ao : ", ao);
		printArray("bo : ", bo);
		System.out.println();

		bo[0] = 200;

		printArray("ao : ", ao);
		printArray("bo : ", bo);
		System.out.println();
	}

	private static void test3() {
		class Ox {
			public String name;

			public Ox(String name) {
				this.name = name;
			}

			@Override
			public String toString() {
				StringBuilder sb = new StringBuilder();
				sb.append("[");
				sb.append(this.name);
				sb.append("]");
				return sb.toString();
			}
		}

		Ox[] oa = { new Ox("a"), new Ox("b"), new Ox("c"), new Ox("c"),
				new Ox("d") };
		Ox[] ob = new Ox[oa.length];

		printArray("Ox a", oa);
		printArray("Ox b", ob);
		System.out.println();

		ob = oa.clone();

		printArray("Ox a", oa);
		printArray("Ox b", ob);
		System.out.println();

		ob[0] = new Ox("Love");

		printArray("Ox a", oa);
		printArray("Ox b", ob);
		System.out.println();

		ob[ob.length - 1].name = "[* U Joy *]";

		printArray("Ox a", oa);
		printArray("Ox b", ob);
		System.out.println();
	}
}

转载于:https://www.cnblogs.com/shhaoran/archive/2013/02/09/2924479.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值