2015-04-11 4 views
1

Я знаю, что регулярный массив Java int[] arr = new int[5]; живет в куче и поэтому считается объектом. Хотя он рассматривается как объект, он отличается от других объектов Java, потому что он не может делать все, что могут сделать другие объекты 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

ответ

5

Массив - ссылочный тип, что означает, что это подкласс класса Object. Поэтому все методы Object могут быть вызваны на массивы. Возможно, книга означала, что массивы не вводят никаких конкретных методов массива.

[I - это имя класса массива int (int[]).

+1

... но нет, они не имеют каких-либо дополнительных параграфов свои собственные, следовательно, 'java.util.Arrays' и такие. –

+0

Да, поэтому существует класс Arrays, который предлагает статические методы для обеспечения различных операций с массивами. – Muhammad

+0

означает, что кто-то на солнце написал класс [I extends Object – DesirePRG

1

Все приведенные выше методы наследуются от Object. Object в Java API тоже является объектом. Каждый класс, который вы создали, заканчивается .java, по умолчанию унаследован от Object. Конечно even though an array is an object и Every thing is an object

1

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

Каждый массив имеет связанный с ним объект, который вы можете получить доступ через идентификатор массива. Этот объект имеет класс, и этот класс реализует интерфейсы Serializable и Cloneable.

Итак, вы можете вызвать любой из методов, унаследованных от Object, и clone() от Cloneable. Serializable не имеет методов.

Ваша книга неверна - хотя в зависимости от уровня книги это может быть прощающей белой ложью.

1

Насколько мне известно,

метод

GetClass будет вызывать ToString(), который, в свою очередь, вызывает метод GetName().

Итак, int [] arr = new int [5];

Когда вы выполняете arr.getClass(), вызывается метод toString и вызывается метод getName().

поэтому результат, который вы получили, - это [I.

Другой тип массива упоминаются здесь,

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; 

Я думаю, что это поможет.

Благодаря

Смежные вопросы