我知道常规Java数组int[] arr = new int[5];
存在于堆中,因此它被视为一个对象。虽然它被视为一个对象,但它与其他Java对象不同,因为它无法完成其他Java对象所能做的所有事情。
我读到的关于Java的一本书说,
"即使数组是一个对象,它仍然存在于自己的特殊世界中 虽然你可以访问它,但你不能在其上调用任何方法 唯一的实例变量,长度"
本书基于java 5.0。
我使用netbeans作为IDE,奇怪的是我注意到可以在数组对象上调用一些方法" arr"。
arr.equals()
arr.clone()
arr.getClass() --> this gives class [I, and I don't know what it means
这本书是错的,还是在最近的版本中引入了这些方法?什么是class [I
答案 0 :(得分:5)
数组是引用类型,这意味着它是Object
的子类。因此,Object
的所有方法都可以在数组上调用。也许这本书意味着数组不会引入任何特定于阵列的方法。
[I
是int数组的类名(int[]
)。
答案 1 :(得分:1)
您推荐的所有方法都是从Object
继承而来的。 Java API中的Object
也是一个对象。您创建的每个课程都以.java
结尾,默认继承自Object
。当然是even though an array is an object
和Every thing is an object
答案 2 :(得分:1)
https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.1
每个数组都有一个关联对象,您可以通过数组标识符进行访问。该对象有一个类,该类实现接口Serializable
和Cloneable
。
因此,您可以调用从Object继承的任何方法,并从clone()
调用Cloneable
。 Serializable
没有方法。
你的书是错的 - 虽然根据书的水平,这可能是一个可以原谅的白色谎言。
答案 3 :(得分:1)
据我所知,
getClass将调用toString()方法,该方法又调用getName()方法。
所以, int [] arr = new int [5];
执行arr.getClass()时,它将调用toString方法并调用内部的getName()方法。
所以你得到的结果是[我。
这里提到了另一种数组类型,
byte[] me = new byte[1];
int[] me2 = new int[1];
double[] me3 = new double[1];
float[] me4 = new float[1];
String[] me5 = new String[1];
Integer[] me6 = new Integer[1];
System.out.println(me.getClass());
System.out.println(me2.getClass());
System.out.println(me3.getClass());
System.out.println(me4.getClass());
System.out.println(me5.getClass());
System.out.println(me6.getClass());
[B
[I
[D
[F
[Ljava.lang.String;
[Ljava.lang.Integer;
我认为这会对你有帮助。
由于