Lớp Wrapper trong Java
Lớp Wrapper thực chất chỉ là một cái tên chung cho rất nhiều lớp khác nhau. Vì tất cả các lớp thuộc bài hôm nay có cùng một công năng, nên mới gọi chung một cái tên Wrapper như vậy. Cùng eLib.VN tìm hiểu về lớp Wrapper qua bài viết dưới đây.
Mục lục nội dung
1. Lớp Wrapper là gì
Lớp Wrapper trong Java cung cấp kỹ thuật để chuyển đổi kiểu gốc primitive thành đối tượng và từ đối tượng thành kiểu gốc. Từ J2SE 5.0, đặc điểm autoboxing và unboxing sẽ tự động chuyển đổi primitive thành object (là autoboxing) và từ object thành primitive (là unboxing). Một trong 8 lớp của java.lang package là lớp Wrapper trong Java. Bảng dưới đây liệt kê danh sách 8 lớp Wrapper:
Kiểu gốc | Lớp Wrapper |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
2. Chuyển kiểu dữ liệu nguyên thủy thành kiểu Wrapper
Việc chuyển đổi một kiểu nguyên thủy sang kiểu Wrapper của nó người ta gọi là Boxing. Không phải mang ý nghĩa là môn đấm bốc đâu. Boxing ở đây mang ý nghĩa là đóng hộp, tức là đóng dữ liệu nguyên thủy vào trong cái hộp Wrapper của nó đấy. Như ví dụ mà bạn xem trên kia, khi một kiểu int a được chuyển thành kiểu Integer i.
Bạn có thể thực hiện việc boxing thông qua các phương thức khởi tạo của các lớp Wrapper.
public class WrapperExample1 {
public static void main(String args[]) {
// Đổi int thành Integer
int a = 20;
Integer i = Integer.valueOf(a); // đổi int thành Integer
Integer j = a; // autoboxing, tự động đổi int thành Integer trong nội bộ trình biên dịch
System.out.println(a + " " + i + " " + j);
}
}
Output:
20 20 20
3. Chuyển kiểu Wrapper thành kiểu dữ liểu nguyên thủy
Ngược lại với trên kia, khi bạn chuyển từ một kiểu Wrapper sang kiểu nguyên thủy của nó người ta gọi là Unboxing, có nghĩa là mở hộp, tức là mở cái hộp Wrapper để lấy dữ liệu nguyên thủy ra.
public class WrapperExample2 {
public static void main(String args[]) {
// đổi Integer thành int
Integer a = new Integer(3);
int i = a.intValue(); // đổi Integer thành int
int j = a; // unboxing, tự động đổi Integer thành int trong nội bộ trình biên dịch
System.out.println(a + " " + i + " " + j);
}
}
Output:
3 3 3
4. Các phương thức hữu ích của lớp Wrapper
Như trên kia mình có nói là các lớp Wrapper giúp tạo thêm cho các kiểu dữ liệu nguyên thủy vốn chỉ có tác dụng chứa đựng dữ liệu, trở thành một đối tượng với nhiều phương thức hữu dụng hơn. Sau đây mình sẽ liệt kê các phương thức hữu dụng của chúng để bạn tham khảo nhé.
parseXxx()
Tham số truyền vào cho phương thức static này là một chuỗi, kết quả nhận được là một giá trị nguyên thủy tương ứng với chuỗi truyền vào.
int i = Integer.parseInt("10");
float f = Float.parseFloat("4.5");
boolean b = Boolean.parseBoolean("true");
System.out.println(i);
System.out.println(f);
System.out.println(b);
Chắc bạn cũng đoán được kết quả in ra console của dòng code trên đây rồi đúng không nào.
toString()
Khác với toString() của lớp Object, toString() lần này của các lớp Wrapper là phương thức static, nó có một giá trị truyền vào là kiểu dữ liệu nguyên thủy tương ứng với lớp Wrapper đó, và kết quả trả về là một chuỗi tương ứng với giá trị truyền vào. Ví dụ này thử nghiệm với lớp Integer, các lớp Wrapper khác cũng sẽ tương tự.
String sI = Integer.toString(10);
System.out.println(sI);
Kết quả in ra console là chuỗi “10”.
xxxValue()
Bạn đã làm quen với phương thức này ở trên kia. Cụ thể thì các phương thức dạng này giúp chuyển đổi một giá trị của lớp Wrapper nào đó về kiểu dữ liệu nguyên thủy (unboxing). Thỉnh thoảng phương thức này còn giúp chuyển đổi kiểu dữ liệu như khi bạn ép kiểu tường minh một giá trị vậy. Bạn có thể dễ hiểu hơn khi xem ví dụ sau.
Double d = 50.5;
int i = d.intValue();
byte b = d.byteValue();
System.out.println(d);
System.out.println(i);
System.out.println(b);
Kết quả in ra console lần lượt là 50.5, 50 và 50.
compareTo()
Nếu bạn còn nhớ, ở bài học về chuỗi chúng ta cũng đã nói qua phương thức compareTo() dùng để so sánh các giá trị chuỗi với nhau. Vậy thì đối với các lớp Wrapper mà chúng ta làm quen hôm nay, thì công năng của nó vẫn được áp dụng trọn vẹn. Tức là phương thức này sẽ được dùng để so sánh hai giá trị của hai lớp Wrapper (có cùng kiểu dữ liệu) với nhau.
Cụ thể, với việc bạn gọi lopWrapper1.compareTo(lopWrapper2), thì kết quả sẽ như sau.
– Nếu kết quả của phương thức trả về một số âm, thì lopWrapper1 sẽ có giá trị nhỏ hơn lopWrapper2.
– Nếu kết quả của phương thức trả về số 0, thì lopWrapper1 sẽ có giá trị bằng với lopWrapper2.
– Nếu kết quả của phương thức trả về một số dương, thì lopWrapper1 sẽ có giá trị lớn hơn lopWrapper2.Bạn có thể xem ví dụ sau để hiểu rõ hơn.
nteger i = 50;
Integer i1 = Integer.parseInt("50");
Integer i2 = Integer.valueOf(52);
Integer i3 = 30;
System.out.println("CompareTo i & i1: " + i.compareTo(i1));
System.out.println("CompareTo i & i2: " + i.compareTo(i2));
System.out.println("CompareTo i & i3: " + i.compareTo(i3));
Kết quả in ra console sẽ là.
CompareTo i & i1: 0
CompareTo i & i2: -1
CompareTo i & i3: 1
Phương thức này có công dụng và cách sử dụng giống giống với compareTo() trên kia. Khác ở chỗ đây là phương thức static của mỗi lớp Wrapper, nên bạn có thể gọi trực tiếp từ lớp. Đồng thời tham số truyền vào là hai giá trị của hai lớp Wrapper. Kết quả trả về của compare() cũng mang một trong ba giá trị (âm, 0, dương) như với compareTo() trên đây.
Integer i1 = Integer.parseInt("50");
Integer i2 = Integer.valueOf(52);
System.out.println("Compare i1 & i2: " + Integer.compare(i1, i2));
Float f1 = new Float("20.25f");
Float f2 = new Float("2.43f");
System.out.println("Compare f1 & f2: " + Float.compare(f1,f2));
Kết quả in ra console là.
Compare i1 & i2: -1
Compare f1 & f2: 1
equals()
Tương tự như equals() khi so sánh chuỗi. Phương thức này sẽ so sánh các giá trị của các lớp Wrapper và trả về một kiểu boollean, với true là bằng nhau và false là khác nhau. Như ví dụ sau.
Integer i1 = Integer.parseInt("50");
Integer i2 = Integer.valueOf(50);
System.out.println("Compare i1 & i2: " + i1.equals(i2));
Float f1 = new Float("20.25f");
Float f2 = new Float("2.43f");
System.out.println("Compare f1 & f2: " + f1.equals(f2));
Kết quả in ra console là.
Compare i1 & i2: true
Compare f1 & f2: false
Trên đây là bài viết của eLib.VN về lớp Wrapper trong Java. Hy vọng, sau khi đọc xong bài viết này, bạn đọc có thể áp dụng lớp wrapper để tối ưu dữ liệu, làm cho chúng trở nên đa dạng và tiện dụng hơn. Chúc các bạn thành công!
Tham khảo thêm
- doc Đối tượng và lớp (class) trong Java
- doc Phương thức trong Java
- doc Nạp chồng phương thức trong Java
- doc Constructor trong Java
- doc Từ khóa static trong Java
- doc Từ khóa this trong Java
- doc Tính kế thừa trong Java - Từ khóa extends và implements trong Java
- doc Ghi đè phương thức trong Java
- doc Kiểu trả về covariant trong Java
- doc Từ khóa super trong Java
- doc Từ khóa final trong Java
- doc Tính đa hình trong Java
- doc Gắn kết tĩnh và Gắn kết động (Dynamic Binding) trong Java
- doc Toán tử instanceof trong Java
- doc Tính trừu tượng trong Java
- doc Abstract Class trong Java
- doc Interface trong Java
- doc Phân biệt lớp abstract và Interface trong Java
- doc Package trong Java
- doc Các kiểu Modifier trong Java
- doc Access Modifier trong Java
- doc Non Access Modifier trong Java
- doc Tính đóng gói trong Java
- doc Lớp Object trong Java
- doc Nhân bản đối tượng trong Java
- doc Mảng (Array) trong Java
- doc Truyền giá trị và tham chiếu trong Java
- doc Từ khóa strictfp trong Java
- doc Regular Expression trong Java