int[][] a1=new int[3][6];
Object object=a1;
Object[] objects=a1;
System.out.println(object==objects);
System.out.println(object.equals(objects));
这个该怎么解释,难道一个二维数组对象即使Object对象也是Object数组对象?
单根继承,一个类没做任何继承声明,它也会默认的继承自Object。也就是一切类都是Object的子类。所以可以直接做的。
这里在于理解什么是数组,数组直接理解成一个新的对象就行了。数组里面的数据是什么不就是一个对象的属性吗。
比如,int[] nums = new int[5]
它的实质就理解成新的数据类型,现在声明了一个对象,对象里面有5个属性,每个属性都是int类型。只是它的类名是这样取的,]就像这样int[]
class int[] {
int num1;
int num2;
int num3;
int num4;
int num5;
}
都是第一个元素地址。
题主,,,问题提的很好,, 这个问题确实有点意思,,我专门 做了如下测试:
int[][] a1 = new int[3][6];
Object obj1 = a1;
Object[] obj2 = {a1, a1};
Object[] obj3 = {a1};
System.out.println(obj1 == obj2);//false
System.out.println(obj1.equals(obj2));//false
System.out.println(obj1 == obj3);//false
System.out.println(obj1.equals(obj3));//false
System.out.println(obj1 == obj2[0]);//true
System.out.println(obj1.equals(obj2[0]));//true
System.out.println(Object.class.equals(Object[].class));//false,,两个类不是一个。
System.out.println(obj2 instanceof Object);//true,,Object[]的对象也是 Objece类型的
题主这两句代码,,相当于是吧,连个引用指向同一个对象了,,比较引用时是相等。
(里氏代换原则,向上转型了,,object和objects都变成 object类型)
Object object=a1;
Object[] objects=a1;
测试:
Object obj1 = a1;
Object[] obj3 = a1;
System.out.println(obj1.getClass()+" "+obj3.getClass());//class [[I class [[I 输出类型一致,说明是同个类型。
有问题,,,还可以追问,,,,一块探讨。
这个例子告诉你其实二维数组就是每个值都是数组的一维数组,而一维数组就是个对象,对象都是object,object数组还是object。
object很特殊,建议楼主查一下文档好好理解下。另外如果设计好了,其他类型也能实现这样的情况。
其实用Arrays.equals(),就可以完成数组比较.
调用下面这句,也还是调用了Object的equals和object==objects没有区别.
System.out.println(object.equals(objects));