CodeGym /Blog Java /Ngẫu nhiên /Các lớp trình bao bọc trong Java

Các lớp trình bao bọc trong Java

Xuất bản trong nhóm
CHÀO! Bạn đã quen thuộc với các kiểu nguyên thủy và đã làm việc khá nhiều với chúng. Trong lập trình (và đặc biệt là Java), các nguyên hàm có nhiều ưu điểm: chúng sử dụng ít bộ nhớ (và do đó làm cho chương trình hiệu quả hơn) và có một phạm vi giá trị được phân định rõ ràng. Tuy nhiên, khi học Java, chúng ta thường nhắc đi nhắc lại câu thần chú "mọi thứ trong Java đều là đối tượng". Nhưng những người nguyên thủy mâu thuẫn trực tiếp với những từ đó. Chúng không phải là đồ vật. Vì vậy, nguyên tắc "mọi thứ đều là đối tượng" của chúng ta có sai không? Trên thực tế, không phải vậy. Trong Java, mọi kiểu nguyên thủy đều có một người anh em sinh đôi, một lớp bao bọc.

Lớp Wrapper là gì?

Trình bao bọc là một lớp đặc biệt lưu trữ nội bộ nguyên thủy. Nhưng vì nó là một lớp nên bạn có thể tạo các thể hiện của nó. Chúng lưu trữ các giá trị nguyên thủy bên trong, nhưng vẫn là các đối tượng thực. Tên lớp trình bao bọc rất giống với (hoặc hoàn toàn giống với) tên của các nguyên hàm tương ứng của chúng. Vì vậy, chúng rất dễ nhớ.
Các lớp trình bao bọc cho các kiểu dữ liệu nguyên thủy
Các kiểu dữ liệu nguyên thủy lớp bọc
int số nguyên
ngắn Ngắn
dài Dài
byte byte
trôi nổi Trôi nổi
gấp đôi Gấp đôi
than Tính cách
boolean Boolean
Các đối tượng trình bao bọc được tạo giống như bất kỳ đối tượng nào khác:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
Các lớp bao bọc cho phép chúng tôi giảm thiểu những thiếu sót của các kiểu nguyên thủy. Rõ ràng nhất là nguyên thủy không có phương pháp. Ví dụ: họ không có phương thức toString() , vì vậy, chẳng hạn, bạn không thể chuyển đổi một int thành String . Nhưng lớp trình bao bọc Integer giúp việc này trở nên dễ dàng.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
Tuy nhiên, chuyển đổi theo hướng khác có thể phức tạp hơn. Giả sử chúng ta có một String mà chúng ta biết chắc chắn có chứa một số. Bất kể, không có cách riêng nào để sử dụng int nguyên thủy để trích xuất số từ Chuỗi và chuyển đổi nó thành số. Nhưng, chúng ta có thể với các lớp bao bọc.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Đầu ra:
1166628
Chúng tôi đã trích xuất thành công một số từ Chuỗi và gán nó cho biến tham chiếu Số nguyên i . Nhân tiện, liên quan đến tài liệu tham khảo. Bạn đã biết rằng các đối số được truyền cho các phương thức theo nhiều cách khác nhau: nguyên hàm theo giá trị và đối tượng theo tham chiếu. Bạn có thể sử dụng kiến ​​thức này khi tạo phương thức của riêng mình: ví dụ: nếu phương thức của bạn sử dụng số phân số nhưng bạn cần logic để truyền tham chiếu, bạn có thể truyền đối số Double / Float cho phương thức thay vì double / float . Ngoài các phương thức của lớp trình bao bọc, các trường tĩnh của chúng cũng có thể rất thuận tiện. Ví dụ: hãy tưởng tượng bạn có nhiệm vụ sau: hiển thị số lượng tối đa có thểgiá trị int , theo sau là giá trị nhỏ nhất có thể. Vấn đề này có vẻ khá cơ bản. Nhưng không có Google, chưa chắc bạn đã làm được. Nhưng các trình bao bọc cho phép bạn dễ dàng xử lý các "nhiệm vụ trần tục" như vậy:

public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Những lĩnh vực này giúp bạn không bị phân tâm khỏi việc hoàn thành các nhiệm vụ nghiêm trọng hơn. Chưa kể đến việc gõ 2147483647 (là giá trị của MAX_VALUE) không phải là chuyện nhỏ! :) Hơn nữa, trong bài học trước, chúng ta đã chỉ ra rằng các đối tượng bao bọc là bất biến.

public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Đầu ra:
0
Trạng thái của đối tượng ban đầu được chỉ ra bởi a không thay đổi (vì giá trị của b cũng sẽ thay đổi). Như với String s, thay vì thay đổi trạng thái của đối tượng bao bọc, một đối tượng hoàn toàn mới được tạo trong bộ nhớ. Vì vậy, tại sao những người tạo ra Java cuối cùng lại quyết định để lại các kiểu nguyên thủy trong ngôn ngữ? Vì mọi thứ phải là một đối tượng và chúng ta có các lớp trình bao bọc có thể diễn đạt mọi thứ mà các hàm nguyên thủy thể hiện, tại sao không chỉ giữ các hàm bao bọc trong ngôn ngữ và loại bỏ các hàm nguyên thủy? Câu trả lời rất đơn giản: hiệu suất. Các loại nguyên thủy được gọi là nguyên thủy vì chúng thiếu nhiều tính năng "nặng ký" của các đối tượng. Vâng, các đối tượng có nhiều phương thức thuận tiện, nhưng không phải lúc nào bạn cũng cần đến chúng. Đôi khi, tất cả những gì bạn cần là số 33 hoặc 2,62 hoặc true / false . Trong các tình huống mà lợi thế của các đối tượng không quan trọng và không cần thiết để chương trình hoạt động, thì các nguyên hàm phù hợp hơn nhiều với nhiệm vụ.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION