int là một loại primitive type (Kiểu dữ liệu nguyên thủy)
Integer khi chuyển đổi qua lại với int thì được gọi là một wrapper class. Bản chất là class kế thừa từ object Number.
Primitive type | Wrapper class |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
int | Integer |
long | Long |
short | Short |
double | Double |
Khi đề cập sự khác biệt giữa 2 loại int và Integer, qua sự chuyển đổi của chúng thì chúng ta sẽ “đụng” tới 2 lý thuyết cơ bản:
+ Autoboxing
+ Unboxing
Xét ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.util.ArrayList; import java.util.List; public class Unboxing { public static void main(String[] args) { Integer i = new Integer(- 8 ); /*1. Unboxing là khi chuyển từ Wrapper class (Integer) sang primitive type (int) (Unbox là bóc thằng to thành thằng nhỏ :d. Hiểu vậy cho dễ nhớ :)) ) Unboxing thông qua việc gọi hàm. */ /*bản chất mà chúng ta không nhìn thấy chỗ này, i lúc đầu là Integer là một class đối tượng sẽ có các hàm override từ Number: i.intValue() => i lúc này chuyển thành int*/ int absVal = absoluteValue(i); System.out.println( "absolute value of " + i + " = " + absVal); List<Double> ld = new ArrayList<Double>(); /*Π được autoboxed thông qua việc gọi hàm. Chuyển từ double sang Double: Double.valueOf(3.1416) */ ld.add( 3.1416 ); /* 2. Unboxing thông qua việc gán. Chuyển wrapper class Double thành double primitive type*/ double pi = ld.get( 0 ); System.out.println( "pi = " + pi); } public static int absoluteValue( int i) { return (i > 0 ) ? -i : i; } } |
Thêm nữa, Integer là một Wrapper class con của Number. Đã là một đối tượng thì nó mang đầy đủ tính chất của một đối tượng. Có các hàm mà bản thân Object Number define (toString, valueOf, intValue, intLong, compare… ) mà primitive type không có.