2017-04-05 19 views
5

Tôi đã tìm kiếm tất cả trên web, nhưng tất cả các câu trả lời chỉ bao gồm sự khác biệt. Tôi biết sự khác biệt, nhưng tôi không hiểu sự khác biệt trong các ứng dụng của họ. Ví dụ, giả sử chúng ta phải lấy hai giá trị thả nổi, nếu sử dụng gấp đôi, chúng ta có thể dễ dàng so sánh bằng cách sử dụng a==b, trong khi nếu chúng ta sử dụng Double, chúng ta sẽ phải sử dụng a.equals(b).Sự khác biệt trong cách sử dụng kiểu dữ liệu nguyên thủy và bao bọc và nhu cầu của kiểu dữ liệu bao bọc là gì?

+2

Hy vọng rằng so sánh '==' trên phao chỉ là một ví dụ :) http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java – jensgram

Trả lời

3

Có nhiều cảnh phía sau hậu trường. Một trong những lý do là như thế nào API Collections được phát triển trong Java ...

Hãy xem xét rằng bạn không thể làm bất cứ điều gì như:

List<int> myList 

trong Java. Bạn sẽ cần trình bao bọc cho rằng

List<Integer> myList 

vì Bộ sưu tập làm việc với các đối tượng chứ không phải nguyên thủy.

Mặt khác, giấy gói là đối tượng cung cấp các nhà phát triển một nhóm tốt đẹp của phương pháp/hằng số mà làm cho "nhanh hơn và dễ dàng hơn" một số hoạt động như:

int x = 17; 

Bây giờ, nhờ vào sự bao bọc bạn có thể làm :

String pars= Integer.toBinaryString(x); 
pars= Integer.toHexString(x); 
Integer.MAX_VALUE; 
Integer.highestOneBit(x); 

Nếu không, bạn sẽ bị đau ở cổ, vì nguyên thủy x không có ích lợi gì cho bạn.

+0

Trên bên lưu ý, có những triển khai của "Bộ sưu tập nguyên thủy cho Java" ví dụ ở đây: http://pcj.sourceforge.net –

2

Khi bạn sử dụng Collections bạn phải sử dụng các đối tượng và không nguyên thủy.

List<double> list = new ArrayList<double>; // not allowed 
List<Double> list = new ArrayList<Double>; // allowed 
Map<double, String> map = new HashMap<double, String>(); // not allowed 
Map<Double, String> map = new HashMap<Double, String>(); // allowed 

Hoặc nếu bạn muốn số Double của bạn có thể bị vô hiệu. Hữu ích ví dụ với Hibernate 's tổ chức và với DTO or POJO

private int number; // default: 0 
private Integer number; // default: null 

Double cho phép bạn làm diễn viên nhanh chóng

double.intValue(); 
double.toString(); 
6

Bạn có thể tìm thấy nó trên blog

1. Đầu tiên

Đôi là kiểu tham chiếu để bạn có thể sử dụng nó làm mẫu arg ument

Ví dụ:

public class Tmp<T> { 
    public Tmp() { 
    } 
} 

Nếu bạn muốn tạo ra một lớp như thế.

Sau đó, bạn phải vượt qua kiểu tham chiếu, trong khi tạo ra đối tượng của trong. Ví dụ

new Tmp<Integer>() 

Bạn sẽ nhận được một lỗi nếu bạn tạo đối tượng như:

new Tmp<int>() 

2. Thứ hai

Chỉ vì lớp Wrapper có thể làm lập trình datatype chung .

Ví dụ phương thức dưới đây chấp nhận bất kỳ loại số nào (Byte, Integer, Double, Short, Float, Long, BigDecimal, BigInteger, AtomicInteger, AtomicLong) và trả lại số Integer bổ sung các số đó.

public Integer add(Number a, Number b){ 
    return a.intValue() + b.intValue(); 
} 

3. Thứ ba

Trong phiên bản trước của Java là không hỗ trợ autoboxing và AutoUnboxing. Vì vậy, nếu bạn sử dụng phiên bản Java đó thì bạn có thể dễ dàng phân biệt cả hai.

Ví dụ, nếu bạn sử dụng Java 1.4 hoặc phiên bản trước đó thì:

Integer a = 1; // Auto Boxing(Not Works) 
Integer a2 = new Integer(2); // Boxing (It Works) 

4. Thứ tư

Storage của cả hai cũng khác nhau các loại nguyên thủy được lưu trữ trong Stack trong khi các loại tài liệu tham khảo là cửa hàng ở Heap

5. Thứ năm

Bạn có thể sử dụng chức năng của lớp đó như phân tích cú pháp chuỗi thành Số nguyên, Số kép, v.v. và sử dụng đồng ý của cùng một loại.

Sau đây là các chức năng và sự đồng ý của Integer lớp

enter image description here

6. Thứ sáu

Bạn có thể serialize Integer trong khi nó không phải là có thể với int

7. Seventh

Bạn có thể vượt qua Integer như một phương pháp RMI nhưng điều này cũng không thể với int

Lưu ý: Cả hai Integerint thể là một phần của một đối tượng trong lập luận RMI trên thực tế bên trong lớp Integer họ lưu trữ giá trị trong int.

8. Eighth

Variable của int là có thể thay đổi (Nó không phải là trường hợp với final int) trong khi Integer là không thay đổi. Nó sẽ tạo đối tượng mới khi chúng ta thay đổi giá trị.

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