2012-01-08 55 views
69

Trong java chúng ta có thể khai báo một mảng nhưlà một mảng một đối tượng trong java

String[] array = new String[10]; 
int size = array.length; 

Điều này có nghĩa rằng các mảng chính nó 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.

+5

Không, trong C++ một mảng là một mảng, và không phải là một mảng. –

+37

'if (mảng instanceof Object) System.out.println (" Có! ")' – skaffman

+6

Ồ, và trong C++, cả mảng và con trỏ đều là đối tượng. –

Trả lời

164

Có.

Java Language Specification section 4.3.1 bắt đầu với:

Một đối tượng là một cá thể của lớp hoặc một mảng.

+1

Cho đến bây giờ, tôi luôn luôn giả định một đối tượng đồng nghĩa với thể hiện lớp và mảng đó là một tính năng ngôn ngữ đặc biệt hoặc một cái gì đó. – Ruben9922

48

Có; Đặc tả Ngôn ngữ Java writes:

Trong ngôn ngữ lập trình Java, mảng là đối tượng (§4.3.1), được tạo động và có thể gán cho các biến kiểu Object (§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.

+0

Nếu mảng là một đối tượng, điều đó không có nghĩa là nó là một thể hiện của một lớp? Nếu vậy, tôi có thể mở rộng lớp đó không? –

+5

Không, nó không: Thông số Java [viết] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.3.1): "An đố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 ra một cách rõ ràng bởi một biểu thức tạo thể hiện lớp (§15.9) .Một mảng được tạo ra một cách rõ ràng bằng một biểu thức tạo mảng (§15.10). " Và không, bạn không thể mở rộng một mảng, vì mệnh đề mở rộng [phải] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.4) có một ClassType. – meriton

2

Tôi sẽ nói câu trả lời là có, mặc dù tôi có thể thêm rằng, nói đúng, một 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):

An đối tượng là một vùng lưu trữ.

5

Có, nó là một đối tượng trong Java.

Cũng lưu ý rằng khi bạn làm array.length bạn không gọi bất kỳ phương thức nào nhưng chỉ truy cập vào trường length của mảng. Có rất nhiều phương pháp tĩnh trong lớp Arrays.

2

Điều quan trọng cần lưu ý là các mảng trong Java có các mã byte riêng mà chúng không chia sẻ với các đối tượng. Họ chắc chắn là đối tượng, nhưng được xử lý hơi khác ở mức thấp.

0

Mọi mảng trong java là một đối tượng ex int [] a = new int [2]; Vì vậy, mới được sử dụng để tạo ra 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 a.getClass(). GetName();

21

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); 
    } 
} 

Output:

true 
true 
Các vấn đề liên quan