У Java ми можемо оголосити масив як
String[] array = new String[10];
int size = array.length;
Чи означає це, що сам масив є об’єктом? Оскільки в C ++ масив - це просто вказівник і не має жодних методів.
У Java ми можемо оголосити масив як
String[] array = new String[10];
int size = array.length;
Чи означає це, що сам масив є об’єктом? Оскільки в C ++ масив - це просто вказівник і не має жодних методів.
if (array instanceof Object) System.out.println("Yes!")
&x, p+iі new int(42).
Відповіді:
Так; Специфікація мови Java пише :
У мові програмування Java масиви є об'єктами (§4.3.1), динамічно створюються і можуть бути призначені змінним типу Object (§4.3.2). Усі масиви класу Object можуть бути викликані в масиві.
Ну, давайте запитаємо Java!
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(args instanceof Object);
int[] someIntegers = new int[] {42};
System.out.println(someIntegers instanceof Object);
}
}
Вихід:
true
true
int[] someIntegers = {42};, до того ж результату.
Так, це об’єкт у Java.
Також зауважте, що коли ви це array.lengthробите, ви не використовуєте будь-які методи, а просто отримуєте доступ до lengthполя масиву . У класі Arrays існує безліч статичних методів .
Я б сказав, що відповідь так, хоча я міг би додати, що, власне кажучи, масив - це об'єкт і в C ++. З §1.8 [intro.object] чинного стандарту (FDIS):
Об'єкт є областю зберігання.
Я просто хочу додати, що масиви мають представлення в API відображення - java.lang.reflect.Array .
Кожен масив у Java є об'єктом ex int [] a = new int [2]; Тож new використовується для створення об’єкта, і оскільки це об’єкт, ми можемо перевірити назву класу, просто використовуючи a.getClass (). GetName ();
java.util.Object(new int[1]) instanceof Object // -> evaluates to true
java.util.Arraysє допоміжним класом, і масиви не є екземплярами цього класу.(new int[1]) instanceof java.util.Arrays // -> compile error
java.lang.reflect.Arrayє допоміжним класом, і масиви не є екземплярами цього класу.(new int[1]) instanceof java.lang.reflect.Array // -> compile error
Масиви успадковують усіх членів java.lang.Object
Масиви замінюють метод, clone()успадкований від Object.
Масиви реалізують поле length, яке містить кількість компонентів масиву. довжина може бути додатною або нульовою. Це publicі final.
Масиви реалізують інтерфейси Cloneableта java.io.Serializable.
8а. Масиви підтримуються Class<T>. Ви можете отримати Class<T>екземпляр із екземпляра масиву
(new int[2]).getClass()
або з типу масиву
int[].class
8б. Унікальний екземпляр класу відображення (тобто екземпляр java.lang.Class<T>) створюється для кожного різного типу масиву у вашому коді. Приклади
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
ЛІТЕРАТУРА
З розділу специфікації Java 4.3.1 Об’єкти
Об'єкт - це екземпляр класу або масив.
Екземпляр класу явно створюється виразом створення екземпляра класу.
Масив явно створюється виразом створення масиву.
Прямим суперкласом типу масиву є Object.
Кожен тип масиву реалізує інтерфейси Cloneableта java.io.Serializable.
Членами типу масиву є всі наступні:
Публічне кінцеве поле length, яке містить кількість компонентів масиву. довжина може бути додатною або нульовою.
Відкритий метод clone, який замінює однойменний метод у класі Objectі не видає перевірених винятків. Тип повернення cloneметоду типу масиву T[]- T[].
Клон багатовимірного масиву неглибокий, тобто він створює лише один новий масив. Підмасиви є спільними.
Усі члени, успадковані від класу Object; єдиний метод Object, який не успадковується, - це метод клонування.
Масиви чого-небудь є об'єктами. Можна назвати такі методи, як equals, і hashcodeт.д .:
final int[] i = {};
i.equals(new int[] {1}); // false
i.hashcode();
Не можна викликати методи рідного типу.
Дотримуйтесь фрагмента коду та виводу.
public class Tester {
int a[];
public static void main(String[] args) {
System.out.println(new Tester().a);// null
System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10)
}
}
чітко масив a розглядається як об'єкт.