(一)用数组实现两数交换的图解
public static void swap(int[] array) {
int tmp = array[0];
array[0] = array[1];
array[1] = tmp;
}
public static void main(String[] args) {
int[] array2 = {10,20};
System.out.println(Arrays.toString(array2));
swap(array2);
System.out.println(Arrays.toString(array2));
}
(二)浅拷贝和深拷贝
1.浅拷贝
public static void main(String[] args) {
int[] array1 = {10,11,12,13};
int[] array2 = Arrays.copyOf(array1,array1.length);
int[] array3 = array1.clone();
}
2.深拷贝
class Money implements Cloneable {
protected int money = 2;
@Override
public String toString() {
return "Money{" +
"money=" + money +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class Person implements Cloneable{
protected int age;
protected Money m;
public Person(int age) {
this.age = age;
m = new Money();
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", m=" + m +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
Person p = (Person)super.clone();
p.m = (Money)this.m.clone();
return p;
}
}
public class TestDemo {
public static void main1(String[] args) {
Person person1 = new Person(12);
try {
Person person2 = (Person)person1.clone();
person2.age = 10;
person2.m.money = 100;
System.out.println(person1);
System.out.println(person2);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
注意事项:
为什么Cloneable接口是一个空接口?
答:我们也把他叫做标记接口,只要一个类实现了这个接口,那么这个类就可以进行clone。
(三)二维数组的图解
public static void main(String[] args) {
int[][] array = new int[2][];
array[0] = new int[]{1,2,3};
array[1] = new int[]{4,5};
System.out.println(Arrays.deepToString(array));
}