2012-06-16 36 views
5

thể trùng lặp:
Why can Integer and int be used interchangably?Tại sao java có kiểu dữ liệu Integer int và int và tôi có thể di chuyển dữ liệu từ cái này sang cái khác không?

Tôi cố gắng để hiểu sự khác biệt giữa chúng. Tôi có thể tuyên bố một cái gì đó là một int ví dụ và sau đó so sánh điều này với một số mà tôi đặt trong một Integer? Ngoài ra tại sao Java có hai. Tại sao không chỉ kết hợp những thứ này?

Ai đó có thể giúp tôi bằng cách hiển thị cho tôi ví dụ về mã hàng 3-4 về cách sử dụng từng mã không?

+1

Bạn có nghĩa là lớp Integer? – taskinoor

+0

Chính xác, java có một kiểu int nguyên thủy và một lớp "Integer"! Lớp có thói quen ... ..., kiểu nguyên thủy chỉ là, nguyên thủy !!! – trumpetlicks

+0

Kiểu nguyên thủy nhanh hơn, nhưng chúng không hoạt động như đối tượng lớp. –

Trả lời

5

int nguyên thủy không phải là một đối tượng. Mảng cho phép primiteves:

int[] array = new int[10]; 

nhưng Generics không:

List<int> //won't compile 

Đây là lý do chính để sử dụng lớp wrapper những ngày này. Ngoài ra, bạn có thể sử dụng Integer trong đó Object được mong đợi. Cuối cùng, Integer có thể có giá trị null nếu bạn muốn triển khai tùy chọn.

Lưu ý rằng có một số ngôn ngữ xử lý sự không thống nhất đó. Trong bạn có các loại giá trị, trong Intlớp mở rộng từ AnyVal lớp trong khi đối tượng bình thường mở rộng AnyRef (cả hai loại này mở rộng từ Any).

1

int là nguyên thủy, Số nguyên là một lớp. Bạn không thể nói ArrayList<int> nhưng bạn có thể nói ArrayList<Integer>.

2

Xem boxing loại trong Java. Có nói về việc làm cho chúng chính xác như nhau bắt đầu bằng Java 9.

1

Tất cả các kiểu nguyên thủy trong Java đều có lớp đối tượng của chúng (lớp được dẫn từ Object), ví dụ Boolean, Long v.v. Nó được gọi là "boxing". Giải thích xem ví dụ here.

2
  • Nguyên thủy int loại và Integer là các loại khác nhau. Bạn không thể so sánh trực tiếp một đối tượng nguyên thủy int với đối tượng Integer. Bạn cần nhận được intValue từ đối tượng Integer.
  • Có, đây là tính năng bắt buộc. Java và một số ngôn ngữ khác có các loại trình bao bọc đối tượng này cho các kiểu nguyên thủy để xử lý các tình huống mà một đối tượng được yêu cầu. Ví dụ, một lớp sưu tập sẽ mong đợi các đối tượng, bạn không thể sử dụng nguyên thủy int với chúng. Vì vậy, bạn sẽ cần một wrapper Integer.
2

Số nguyên là một đối tượng, trong khi int là kiểu nguyên thủy. Về cơ bản, các đối tượng được truyền theo tham chiếu, trong khi nguyên thủy được truyền theo giá trị. Chúng cũng khác nhau ở nơi chúng được phân bổ.

Về mặt Java, một đối tượng có chức năng.Gọi cái gì đó như:

Integer.toString() 

là tốt, nhưng:

int.toString() 

thì không.

+0

Mọi thứ trong java đều được truyền theo giá trị. Cả hai nguyên thủy và các đối tượng như nhau. Java xảy ra trong nội bộ lưu trữ các đối tượng như con trỏ, do đó, giá trị của một đối tượng là một con trỏ. Thực tế, đặc tả ngôn ngữ java nói rõ rằng tất cả các tham số của phương thức đều được truyền theo giá trị. Tuy nhiên, mọi người thường nhầm lẫn nó để vượt qua bằng cách tham chiếu vì bạn có thể gọi một phương thức thay đổi các trường và người gọi thấy điều đó. Điều này không liên quan gì đến việc chuyển qua tham chiếu. – Matt

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