2011-12-30 64 views
10

tôi đã nhận thấy rằng khi thực hiện theo chiều dài của một mảng bạn viết một cái gì đó như:Sự khác nhau giữa độ dài và độ dài() là gì?

arrayone.length; 

Tuy nhiên, đối với những thứ như danh sách mảng hoặc một chuỗi, bạn viết một khung ở cuối dòng, chẳng hạn như sau cho độ dài của Chuỗi:

stringone.length(); 

Lý do chính cho việc này là gì và làm cách nào để bạn biết khi nào để đặt dấu ngoặc đơn hoặc bây giờ?

Trả lời

8
.length; 

trực tiếp truy cập thành viên hiện trường.

.length(); 

gọi một phương pháp (ví dụ: một accessor) để truy cập vào một thành viên thực địa.

trong trường hợp String, điều này được mong đợi vì đó là không thể thay đổi.

0

.length() là một phương thức của một lớp String và trả về số ký tự trong chuỗi.

.length sẽ cung cấp số lượng phần tử được lưu trữ trong một mảng.

public class length 
{ 
public static void main(String args[]) 
{ 
String x="test"; 
int a[]={1,2,3,4}; 
System.out.println(x.length()); 
System.out.println(a.length); 
} 
} 

// output 
4 
4 
2

Cách duy nhất để biết thời điểm sử dụng trải nghiệm nào. Mặc dù một IDE với tự động hoàn thành thường sẽ giúp bạn khi bạn không nhớ.

Đối với hầu hết các phần (không phải lúc nào) mảng.length, System.out và System.err là phổ biến nhất 3 bạn sẽ chạy vào đó thực sự là truy cập thành viên thay vì các cuộc gọi phương thức.

0

Array.length là tài sản của số Array, tương tự như tham chiếu biến.

ArrayList.size() là cuộc gọi phương thức thực tế đến đối tượng danh sách mảng.

3

Arrays được xử lý khác với Strings hoặc ArrayLists hoặc bất kỳ thứ gì khác có thể được tính bằng Java. An Array là khá nhiều kiểu gốc và độ dài của nó không bao giờ có thể thay đổi sau khi được khởi tạo, vì vậy không cần đóng gói. Biến chiều dài có thể được tiếp xúc trực tiếp mà không có tác dụng phụ.

Lý do tại sao String sử dụng một phương pháp thay vì biến là vì nó sử dụng nội bộ char[] mà nó không muốn để lộ công khai (đối với tính không thay đổi/đóng gói), vì vậy nó kết thúc biến dài theo phương pháp length(). Đó là lý do tương tự ArrayList có phương thức size() thay vì biến số length.

Lần duy nhất bạn sẽ sử dụng biến thay vì phương pháp là với mảng. Mọi thứ khác sẽ là phương pháp. Tức là, bạn sẽ sử dụng các dấu ngoặc cho mọi thứ ngoại trừ mảng.

0
int[] myArray = new int[10]; 
String myString = "hello world!"; 
List<int> myList = new ArrayList<int>(); 

myArray.length //gives the length of the array 
myString.length() //gives the length of the string 
myList.size()  //gives the length of the list 

Rất có khả năng các chuỗi và mảng được thiết kế vào các thời điểm khác nhau và do đó kết thúc bằng các quy ước khác nhau.Một lý do là vì chuỗi sử dụng mảng nội bộ một chiều dài phương thức() được sử dụng để tránh trùng lặp của cùng một thông tin. Cuối cùng, đây chỉ là một sự mâu thuẫn phát triển chắc chắn sẽ được sửa chữa nếu ngôn ngữ được thiết kế lại từ đầu. : D

+0

Không. Không phải chúng được thiết kế vào những thời điểm khác nhau. Bất cứ thứ gì có 'kích thước' –

0

Sự khác biệt chính là trong A) trường hợp đầu tiên kiểu mảng ví dụ int[], Object[], double[], vv .. mà có một lĩnh vực nào gọi là chiều dài và B) Trường hợp thứ hai là một chuỗi đối tượng có một hàm có tên là length(), hàm có thể được gọi là getLength() hoặc một thứ khác. Độ dài trường kiểu mảng có thể là một sự nôn nao từ cách làm việc của C++.

loại Mảng có điều sau đây:

  • Các công thức dài trường, trong đó có số lượng thành phần của mảng (chiều dài có thể tích cực hoặc không)
  • Phương pháp nào clone, mà sẽ ghi đè phương thức cùng tên trong đối tượng lớp và không ném ngoại lệ đã kiểm tra
  • Tất cả các thành viên được kế thừa từ đối tượng lớp; phương pháp duy nhất của Đối tượng không được kế thừa là phương pháp sao chép của nó

Hãy xem this, Array Types.

0

length là tham chiếu thành viên giả dữ liệu và chỉ hoạt động đối với mảng nhỏ (a) (bỏ qua các lớp mà bạn có thể xác định triển khai thành viên).

Mọi thứ khác là đối tượng của một lớp và tất cả các lớp JDK có khái niệm này xác định phương thức thể hiện length() hoặc size(). (Tôi ước họ đã nhất quán và chọn cái này hay cái kia, nhưng đó là nước qua cầu.)

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