Java的常规数组是否内置了方法?

时间:2015-04-11 07:12:47

标签: java arrays

我知道常规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

4 个答案:

答案 0 :(得分:5)

数组是引用类型,这意味着它是Object的子类。因此,Object的所有方法都可以在数组上调用。也许这本书意味着数组不会引入任何特定于阵列的方法。

[I是int数组的类名(int[])。

答案 1 :(得分:1)

您推荐的所有方法都是从Object继承而来的。 Java API中的Object也是一个对象。您创建的每个课程都以.java结尾,默认继承自Object。当然是even though an array is an objectEvery thing is an object

答案 2 :(得分:1)

https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.1

每个数组都有一个关联对象,您可以通过数组标识符进行访问。该对象有一个类,该类实现接口SerializableCloneable

因此,您可以调用从Object继承的任何方法,并从clone()调用CloneableSerializable没有方法。

你的书是错的 - 虽然根据书的水平,这可能是一个可以原谅的白色谎言。

答案 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; 

我认为这会对你有帮助。

由于