2013-04-13 32 views
5

Ví dụ, nhìn vào mã này:Sự cần thiết của phương thức intValue() nếu trình bao bọc sử dụng unboxing là gì?

Integer myInt = new Integer(5); 
int i1 = myInt.intValue(); 
int i2 = myInt; 

System.out.println(i1); 
System.out.println(i2); 

Như bạn thấy, tôi có hai cách để sao chép giá trị số nguyên của tôi từ wrapper cho primive:

tôi có thể sử dụng unboxing

HOẶC

tôi có thể sử dụng phương pháp intValue()

... Vì vậy, cần phải có một phương pháp khi đã có là những gì unboxing?

Trả lời

9

Mở hộp được giới thiệu trong Java 5. Trình bao bọc (bao gồm cả phương thức này) đã có từ bản phát hành gốc.

Một liên kết đến các Javadoc

Trong thời điểm đó (1996), chúng tôi đã làm cần phương pháp intValue() và như Oracle đảm bảo khả năng tương thích ngược ngược ... lên đến một mức độ nhất định (nó không phải lúc nào cũng 100% trên phiên bản chính).

Phương pháp này có ở lại.

+0

Vì vậy, hôm nay tôi giả sử với JDK7 nó tốt hơn để sử dụng unboxing hơn intValue cũ(). – user1883212

+0

@ user1883212 Giống như DeltaLima thể hiện trong câu trả lời của mình, việc đánh boxing/unboxing có thể đưa ra một số kết quả lạ, miễn là bạn biết những gì bạn đang làm cảm thấy tự do khi sử dụng bất kỳ hệ thống nào. – Frank

7

Ngoài câu trả lời của Frank mà đưa ra một quan điểm lịch sử tốt vẫn có nhu cầu sử dụng intValue() ngày hôm nay trong một số tình huống.

Hãy nhận biết của cạm bẫy sau đó cho thấy rằng bạn không thể coi một Integer như một int:

Integer i1 = new Integer(5); 
Integer i2 = new Integer(5); 

//This would be the way if they were int 
System.out.println(i1 == i2); //Returns false 

//This is the way for Integers 
System.out.println(i1.intValue()==i2.intValue()); //Returns true 
System.out.println(i1.equals(i2)); //Returns true 

Returns

false 
true 
true 
+0

Ai biết được có bao nhiêu cái nhìn khó hiểu và những cái đầu trầy xước mà điều này đã gây ra. Khá điển hình để chạy vào điều này bất ngờ khi lập chỉ mục vào vùng chứa và cố gắng so sánh các giá trị. Ví dụ. 'List A;' 'A.get (i) == A.get (i - 1)' trả về 'false' mặc dù cả hai vị trí chứa' Integer (5) '... – AndrewJC

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