Các lớp trình bao bọc hoạt động như thế nào?

Về cơ bản, các lớp chung chỉ hoạt động với các đối tượng và không hỗ trợ nguyên thủy. Kết quả là nếu chúng ta muốn làm việc với chúng, chúng ta phải chuyển đổi các giá trị nguyên thủy thành các đối tượng bao bọc

Ví dụ: Khung bộ sưu tập Java chỉ hoạt động với các đối tượng. Từ lâu khi (trước Java 5, gần 15 năm trước) không có autoboxing và chẳng hạn, chúng tôi không thể gọi add(5) trên một tập hợp các Số nguyên

Vào thời điểm đó, các giá trị nguyên thủy đó cần được chuyển đổi theo cách thủ công thành các lớp trình bao bọc tương ứng và được lưu trữ trong các bộ sưu tập

Ngày nay, với autoboxing, chúng ta có thể dễ dàng thực hiện ArrayList. add(101) nhưng trong nội bộ Java chuyển đổi giá trị nguyên thủy thành Số nguyên trước khi lưu trữ trong ArrayList bằng phương thức valueOf()

3. Chuyển đổi lớp Primitive sang Wrapper

Bây giờ câu hỏi lớn là. làm cách nào để chuyển đổi một giá trị nguyên thủy thành một lớp bao bọc tương ứng e. g. int thành Integer hay char thành Character?

Chà, chúng ta có thể sử dụng hàm tạo hoặc phương thức nhà máy tĩnh để chuyển đổi một giá trị nguyên thủy thành một đối tượng của lớp trình bao bọc

Tuy nhiên, kể từ Java 9, hàm tạo cho nhiều hàm nguyên thủy được đóng hộp như  or  không được dùng nữa

Vì vậy, chúng tôi khuyên bạn chỉ nên sử dụng các phương thức xuất xưởng trên mã mới

Hãy xem một ví dụ về chuyển đổi một giá trị int thành một đối tượng Integer trong Java

Integer object = new Integer(1);

Integer anotherObject = Integer.valueOf(1);

Phương thức valueOf() trả về một thể hiện đại diện cho giá trị int đã chỉ định

Nó trả về các giá trị được lưu trong bộ nhớ cache làm cho nó hiệu quả. Nó luôn lưu các giá trị trong khoảng từ -128 đến 127 vào bộ nhớ cache nhưng cũng có thể lưu vào bộ nhớ cache các giá trị khác nằm ngoài phạm vi này

Tương tự, chúng ta cũng có thể chuyển đổi boolean thành Boolean, byte thành Byte, char thành Character, long thành Long, float thành Float và double thành Double. Mặc dù nếu chúng ta phải chuyển đổi Chuỗi thành Số nguyên thì chúng ta cần sử dụng phương thức parseInt() vì Chuỗi không phải là lớp bao bọc

Mặt khác, để chuyển đổi từ một đối tượng bao bọc thành một giá trị nguyên thủy, chúng ta có thể sử dụng phương thức tương ứng như intValue(), doubleValue(), v.v.

int val = object.intValue();

Một tài liệu tham khảo toàn diện có thể được tìm thấy ở đây

4. Autoboxing và Unboxing

Trong phần trước, chúng tôi đã trình bày cách chuyển đổi thủ công một giá trị nguyên thủy thành một đối tượng

Sau Java 5, việc chuyển đổi này có thể được thực hiện tự động bằng cách sử dụng các tính năng được gọi là tự động đóng hộp và mở hộp

“Quyền anh” đề cập đến việc chuyển đổi một giá trị nguyên thủy thành một đối tượng bao bọc tương ứng. Bởi vì điều này có thể xảy ra tự động, nó được gọi là autoboxing

Tương tự, khi một đối tượng bao bọc được mở thành một giá trị nguyên thủy thì điều này được gọi là mở hộp

Điều này có nghĩa là trong thực tế, chúng ta có thể chuyển một giá trị nguyên thủy cho một phương thức cần một đối tượng trình bao hoặc gán một giá trị nguyên thủy cho một biến cần một đối tượng

List list = new ArrayList<>();
list.add(1); // autoboxing

Integer val = 2; // autoboxing

Trong ví dụ này, Java sẽ tự động chuyển đổi giá trị int nguyên thủy thành trình bao bọc

Trong nội bộ, nó sử dụng phương thức valueOf() để tạo điều kiện thuận lợi cho việc chuyển đổi. Ví dụ, các dòng sau đây là tương đương

Integer value = 3;

Integer value = Integer.valueOf(3);

Mặc dù điều này giúp chuyển đổi dễ dàng và mã dễ đọc hơn, nhưng có một số trường hợp chúng ta không nên sử dụng autoboxing e. g. bên trong một vòng lặp

Tương tự như autoboxing, unboxing được thực hiện tự động khi chuyển một đối tượng đến một phương thức mong đợi một nguyên hàm hoặc khi gán nó cho một biến nguyên thủy

Integer object = new Integer(1); 
int val1 = getSquareValue(object); //unboxing
int val2 = object; //unboxing

public static int getSquareValue(int i) {
    return i*i;
}

Về cơ bản, nếu chúng ta viết một phương thức chấp nhận một giá trị nguyên thủy hoặc đối tượng bao bọc, chúng ta vẫn có thể truyền cả hai giá trị cho chúng. Java sẽ đảm nhiệm việc chuyển đúng loại e. g. nguyên thủy hoặc trình bao bọc tùy thuộc vào ngữ cảnh

5. Phần kết luận

Trong hướng dẫn nhanh này, chúng ta đã nói về các lớp trình bao bọc trong Java, cũng như cơ chế tự động đóng hộp và mở hộp

Để đặt một int vào một ArrayList, hãy đặt int bên trong một đối tượng của

int val = object.intValue();
0. Hầu hết, công việc của lớp bao bọc
int val = object.intValue();
0 là cung cấp các đối tượng chứa dữ liệu nguyên thủy. Giờ đây, các đối tượng (và dữ liệu nguyên thủy mà chúng chứa) có thể được đưa vào một cấu trúc dữ liệu ArrayList hoặc cấu trúc dữ liệu khác. Chương trình sau đây xây dựng một danh sách các số nguyên và sau đó viết chúng ra

Các lớp trình bao bọc hoạt động như thế nào?
import java.util.* ; class WrapperExample { public static void main ( String[] args) { ArrayList data = new ArrayList(); data.add( new Integer(1) ); data.add( new Integer(3) ); data.add( new Integer(17) ); data.add( new Integer(29) ); for ( int j=0; j < data.size(); j++ ) System.out.print( data.get(j) + " " ); System.out.println( ); } }

Chương trình viết ra

1 3 17 29

Hình ảnh nhấn mạnh rằng ArrayList chứa một mảng tham chiếu đối tượng, như mọi khi. Nó hiển thị các int, mỗi cái được chứa trong một hộp nhỏ đại diện cho đối tượng bao bọc

Lớp trình bao bọc hoạt động như thế nào trong Java?

Lớp bao bọc trong Java cung cấp cơ chế chuyển đổi nguyên thủy thành đối tượng và đối tượng thành nguyên thủy . Kể từ J2SE 5. 0, tính năng autoboxing và unboxing tự động chuyển đổi nguyên thủy thành đối tượng và đối tượng thành nguyên thủy.

Các lớp bao bọc giải thích bằng ví dụ là gì?

Các lớp trình bao bọc trong Java được sử dụng để chuyển đổi các kiểu nguyên thủy ( int , char , float , v.v.) thành các đối tượng tương ứng. Mỗi trong số 8 kiểu nguyên thủy có các lớp bao bọc tương ứng. . Lớp trình bao bọc Java

Lớp bao bọc trong lập trình là gì?

Trong lập trình hướng đối tượng, lớp bao bọc là lớp đóng gói các loại, để các loại đó có thể được sử dụng để tạo các thể hiện và phương thức đối tượng trong một lớp khác cần các loại đó . .

Các phương thức của các lớp bao bọc là gì?

Các phương thức của lớp Wrapper trong Java .
typeValue() Trả về giá trị Đã chuyển đổi của đối tượng Số này thành kiểu dữ liệu đã chỉ định
so sánhTo () Nó so sánh đối tượng Số này với đối số đã chỉ định
equals() Nó kiểm tra xem đối tượng Number này có bằng đối số đã chỉ định hay không
giá trị của().
toString().
parseInt().
cơ bụng().
trần nhà()