Trong java, chúng ta có thể khai báo một mảng như
String[] array = new String[10];
int size = array.length;
Điều này có nghĩa là bản thân mảng là một đối tượng? Bởi vì trong C ++ một mảng chỉ là một con trỏ và không có bất kỳ phương thức nào.
Trong java, chúng ta có thể khai báo một mảng như
String[] array = new String[10];
int size = array.length;
Điều này có nghĩa là bản thân mảng là một đối tượng? Bởi vì trong C ++ một mảng chỉ là một con trỏ và không có bất kỳ phương thức nào.
if (array instanceof Object) System.out.println("Yes!")
&x, p+ivà new int(42).
Câu trả lời:
Đúng; Đặc tả ngôn ngữ Java viết :
Trong ngôn ngữ lập trình Java, mảng là các đối tượng (§4.3.1), được tạo động và có thể được gán cho các biến kiểu Đối tượng (§4.3.2). Tất cả các phương thức của lớp Object có thể được gọi trên một mảng.
Vâng, hãy hỏi 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);
}
}
Đầu ra:
true
true
int[] someIntegers = {42};kết quả tương tự.
Vâng, nó là một đối tượng trong Java.
Cũng lưu ý rằng khi bạn thực hiện, array.lengthbạn không gọi bất kỳ phương thức nào mà chỉ truy cập vào trường của mảng length. Có rất nhiều phương thức tĩnh trong lớp Mảng .
Tôi sẽ nói câu trả lời là có, mặc dù tôi có thể nói thêm rằng, nói đúng ra, mảng cũng là một đối tượng trong C ++. Từ §1.8 [intro.object] của tiêu chuẩn hiện tại (FDIS):
Một đối tượng là một vùng lưu trữ.
Tôi chỉ muốn thêm rằng các mảng có một đại diện trong API phản chiếu - java.lang.reflect.Array .
Mọi mảng trong java là một đối tượng ex int [] a = new int [2]; Vì vậy, new được sử dụng để tạo một đối tượng và vì nó là một đối tượng, chúng ta có thể kiểm tra tên lớp chỉ bằng cách sử dụng a.getClass (). GetName ();
java.util.Object(new int[1]) instanceof Object // -> evaluates to true
java.util.Arraysnày là một lớp trợ giúp và các mảng không phải là cá thể của lớp này.(new int[1]) instanceof java.util.Arrays // -> compile error
java.lang.reflect.Arraynày là một lớp trợ giúp và các mảng không phải là cá thể của lớp này.(new int[1]) instanceof java.lang.reflect.Array // -> compile error
Mảng kế thừa tất cả các thành viên của java.lang.Object
Mảng ghi đè phương thức clone()được kế thừa từ Object.
Mảng triển khai trường length, trường này chứa số lượng thành phần của mảng. độ dài có thể là số dương hoặc số không. Nó là publicvà final.
Mảng triển khai các giao diện Cloneablevà java.io.Serializable.
8a. Mảng được hỗ trợ bởi Class<T>. Bạn có thể truy xuất Class<T>phiên bản từ một phiên bản mảng
(new int[2]).getClass()
hoặc từ một kiểu mảng
int[].class
8b. Một cá thể lớp phản chiếu duy nhất (tức là một cá thể của java.lang.Class<T>) được tạo cho mỗi kiểu mảng khác nhau trong mã của bạn. Ví dụ
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
NGƯỜI GIỚI THIỆU
Từ đặc tả Java Phần 4.3.1 Đối tượng
Một đối tượng là một cá thể lớp hoặc một mảng.
Một cá thể lớp được tạo rõ ràng bởi một biểu thức tạo cá thể lớp.
Một mảng được tạo một cách rõ ràng bởi một biểu thức tạo mảng.
Lớp cha trực tiếp của một kiểu mảng là Object.
Mọi kiểu mảng hiện thực các giao diện Cloneablevà java.io.Serializable.
Từ Phần 10.7 Các thành viên mảng
Các thành viên của một kiểu mảng là tất cả những điều sau:
Trường cuối cùng công khai length, chứa số lượng thành phần của mảng. độ dài có thể là số dương hoặc bằng không.
Phương thức public clone, ghi đè phương thức cùng tên trong lớp Objectvà không ném ra ngoại lệ đã kiểm tra. Kiểu trả về của clonephương thức kiểu mảng T[]là T[].
Bản sao của một mảng nhiều chiều là nông, có nghĩa là nó chỉ tạo ra một mảng mới duy nhất. Các mảng con được chia sẻ.
Tất cả các thành viên kế thừa từ lớp Object; phương thức duy nhất của Object không được kế thừa là phương thức clone của nó.
Mảng của bất kỳ thứ gì đều là đối tượng. Người ta có thể gọi các phương thức như equals, hashcodev.v.:
final int[] i = {};
i.equals(new int[] {1}); // false
i.hashcode();
Người ta không thể gọi các phương thức trên một kiểu gốc.
Quan sát đoạn mã dưới đây và đầu ra.
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)
}
}
rõ ràng mảng a được coi là đối tượng.