- các lớp bao bọc là gì;
- tự động đóng gói/giải nén các bản gốc;
- hoạt động của lớp Integer, các phương thức và hằng số của nó.
Các lớp bao bọc của các kiểu nguyên thủy
Như các bạn đã biết, Java có nhiều kiểu dữ liệu khác nhau, có thể chia thành hai khối:- nguyên thủy;
- thẩm quyền giải quyết.
- số nguyên - byte, short, int, long;
- số dấu phẩy động (thực) - float, double;
- kiểu dữ liệu logic - boolean;
- kiểu dữ liệu ký tự - char.
Kiểu nguyên thủy | Trình bao bọc lớp |
---|---|
byte | Byte |
ngắn | Ngắn |
int | số nguyên |
dài | Dài |
trôi nổi | Trôi nổi |
gấp đôi | Gấp đôi |
boolean | Boolean |
ký tự | Tính cách |
số nguyên
Lớp Integer là lớp bao bọc của kiểu nguyên thủy int. Lớp này chứa một trường duy nhất kiểu int. Là một lớp trình bao bọc, Integer cung cấp nhiều phương thức khác nhau để làm việc với int, cũng như một số phương thức để chuyển đổi int thành String và String thành int. Dưới đây chúng ta sẽ xem xét các ví dụ khác nhau khi làm việc với lớp. Hãy bắt đầu với việc sáng tạo. Cách được sử dụng phổ biến nhất (và dễ sử dụng nhất) là tùy chọn tạo sau:
Integer a = 3;
Nghĩa là, việc khởi tạo một biến Integer trong trường hợp này tương tự như việc khởi tạo một biến int. Hơn nữa, một biến Integer có thể được khởi tạo bằng giá trị của biến int:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Trong trường hợp trên, việc tự động đóng gói diễn ra ngầm. Chúng ta sẽ nói nhiều hơn về nó dưới đây. Ngoài các tùy chọn khởi tạo được liệt kê ở trên, một biến Số nguyên có thể được tạo giống như các đối tượng khác, sử dụng hàm tạo và từ khóa mới:
Integer x = new Integer(25);
System.out.println(x);
Tuy nhiên, nó mất nhiều thời gian hơn để viết và đọc lâu hơn, vì vậy tùy chọn này ít phổ biến nhất. Bạn có thể làm mọi thứ với biến Integer mà bạn có thể làm với biến int. Họ có thể là:
Nếp gấp |
|
Trừ |
|
nhân |
|
Chia |
|
Tăng |
|
Giảm |
|
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
Hầu hết các phép so sánh được thực hiện theo cách tương tự như kiểu nguyên thủy int:
Integer a = 1;
Integer b = 2;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
Đầu ra:
false
false
true
true
Hoạt động so sánh hai biến Integer nổi bật. Và vấn đề ở đây là Integer là một kiểu dữ liệu tham chiếu và các biến của nó lưu trữ các tham chiếu đến các giá trị chứ không phải chính các giá trị đó (đối tượng). Có thể quan sát thấy biểu hiện của thực tế này khi thực thi đoạn mã sau:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a == b); // true
System.out.println(a == c); // false
Kết quả của đẳng thức thứ nhất sẽ đúng và đẳng thức thứ hai sẽ sai. Điều này xảy ra vì trong trường hợp đầu tiên, chúng ta so sánh hai biến (“a” và “b”) lưu trữ các tham chiếu đến cùng một đối tượng. Và trong trường hợp thứ hai, chúng ta so sánh hai biến tham chiếu đến hai đối tượng khác nhau (khi tạo biến “c”, chúng ta đã tạo một đối tượng mới). Hãy đưa ra một ví dụ thú vị khác:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a == b); // true
System.out.println(x == y); // false
Như chúng ta có thể thấy, kết quả của phép so sánh đầu tiên là đúng và kết quả của phép so sánh thứ hai là sai. Đó là tất cả về bộ nhớ đệm. Tất cả các số nguyên trong phạm vi từ -128 đến 127 (các giá trị này có thể được tùy chỉnh) đều được lưu trữ. Vì vậy, khi chúng ta tạo một biến mới và gán cho nó một giá trị số nguyên trong khoảng từ -128 đến 127, chúng ta không tạo một đối tượng mới mà chỉ gán cho biến đó một tham chiếu đến một đối tượng đã được tạo trong bộ đệm. Bây giờ, biết được sự thật này, ví dụ trên có vẻ không quá thần bí. Các biến a và b tham chiếu đến cùng một đối tượng - một đối tượng từ bộ đệm. Và trong quá trình khởi tạo các biến x và y, mỗi lần chúng tôi tạo một đối tượng mới và các biến này lưu trữ các tham chiếu đến các đối tượng khác nhau. Và như các bạn đã biết, toán tử == so sánh giá trị của các biến, còn giá trị của biến tham chiếu là tham chiếu. Để kiểm tra chính xác sự bằng nhau giữa hai biến Số nguyên, bạn phải sử dụng (dù nó nghe có vẻ tầm thường đến mức nào) phương thức bằng. Hãy viết lại ví dụ trên:
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true
Tự động đóng hộp và mở hộp Số nguyên
Tự động đóng gói và giải nén là gì? Khi tạo các biến Số nguyên mới, chúng tôi đã sử dụng cấu trúc sau:Integer a = 2020;
Bằng cách này, chúng tôi đã tạo một đối tượng mới mà không cần sử dụng toán tử khóa mới. Điều này có thể thực hiện được nhờ cơ chế tự động đóng gói của kiểu nguyên thủy int. Quy trình ngược lại xảy ra khi gán một biến int nguyên thủy cho giá trị của biến tham chiếu Số nguyên:
Integer a = 2020;
int x = a;
Trong trường hợp này, dường như chúng ta đã gán tham chiếu (cụ thể là tham chiếu đến đối tượng là giá trị của biến “a”) cho một biến nguyên thủy. Nhưng trên thực tế, nhờ cơ chế auto-unpack nên giá trị 2020 đã được ghi vào biến “x”, auto-packing/unpack là hiện tượng rất phổ biến trong Java. Thường thì nó tự xảy ra, thậm chí đôi khi người lập trình không hề hay biết. Nhưng bạn vẫn cần biết về hiện tượng này. Chúng tôi có một bài viết thú vị về chủ đề này trên Javarush .
Hằng số lớp số nguyên
Lớp Integer cung cấp nhiều hằng số và phương thức khác nhau để làm việc với số nguyên. Trong phần này chúng ta sẽ xem xét kỹ hơn một số trong số chúng trong thực tế. Hãy bắt đầu với các hằng số. Bảng dưới đây hiển thị tất cả các hằng số lớp:Costanta | Sự miêu tả |
---|---|
KÍCH CỠ | Số bit trong hệ thống số có hai chữ số được chiếm bởi kiểu int |
byte | Số byte trong hệ thống số có hai chữ số được chiếm bởi kiểu int |
GIÁ TRỊ TỐI ĐA | Giá trị tối đa mà kiểu int có thể chứa |
MIN_VALUE | Giá trị tối thiểu mà kiểu int có thể giữ |
KIỂU | Trả về một đối tượng kiểu Class từ kiểu int |
public static void main(String[] args) {
System.out.println(Integer.SIZE);
System.out.println(Integer.BYTES);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
}
Kết quả là chúng ta nhận được kết quả đầu ra sau:
32
4
2147483647
-2147483648
int
Các phương thức của lớp Integer
Bây giờ chúng ta hãy xem nhanh các phương thức được sử dụng nhiều nhất của lớp Integer. Vì vậy, những cái “trên cùng” đứng đầu là các phương thức chuyển đổi một số từ một chuỗi hoặc chuyển đổi một chuỗi từ một số. Hãy bắt đầu bằng việc chuyển đổi một chuỗi thành một số. Phương thức ParseInt được sử dụng cho những mục đích này , chữ ký bên dưới:-
static int parseInt(String s)
int i = Integer.parseInt("10");
System.out.println(i); // 10
Nếu không thể chuyển đổi—ví dụ: chúng tôi đã chuyển một từ sang phương thức extractInt—một ngoại lệ NumberFormatException sẽ được đưa ra. Phương thức ParseInt(String s) có một phương thức anh chị em bị quá tải:
-
static int parseInt(String s, int radix)
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8)); // 8
System.out.println(Integer.parseInt("F", 16)); // 15
Các phương thức ParseInt trả về kiểu dữ liệu nguyên thủy int. Các phương thức này có một phương thức tương tự - phương thức valueOf . Một số biến thể của phương pháp này chỉ cần gọi nội bộ phân tích cú pháp. Sự khác biệt so với ParseInt là kết quả của valueOf sẽ là Số nguyên chứ không phải int. Hãy xem xét bên dưới tất cả các tùy chọn cho phương pháp này và một ví dụ về cách thức hoạt động của nó:
- static Integer valueOf(int i) - trả về một Số nguyên có giá trị là i;
- static Integer valueOf(String s) - tương tự như parsInt(String s), nhưng kết quả sẽ là Integer;
- static Integer valueOf(String s, int radix) - tương tự như extractInt(String s, int radix), nhưng kết quả sẽ là Integer.
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);
System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
Chúng tôi đã xem xét các phương pháp cho phép bạn chuyển đổi Chuỗi thành int/Integer. Quy trình ngược lại đạt được bằng cách sử dụng các phương thức toString . Bạn có thể gọi phương thức toString trên bất kỳ đối tượng Integer nào và nhận được biểu diễn chuỗi của nó:
Integer x = 5;
System.out.println(x.toString()); // 5
Tuy nhiên, do phương thức toString thường được gọi ngầm trên các đối tượng (ví dụ: khi gửi một đối tượng đến bàn điều khiển để in), nên phương thức này hiếm khi được các nhà phát triển sử dụng một cách rõ ràng. Ngoài ra còn có một phương thức tĩnh toString, phương thức này nhận tham số int và chuyển đổi nó thành biểu diễn chuỗi. Ví dụ:
System.out.println(Integer.toString(5)); // 5
Tuy nhiên, giống như phương thức toString không tĩnh, việc sử dụng phương thức tĩnh một cách rõ ràng là rất hiếm. Thú vị hơn là phương thức tĩnh toString, có 2 tham số nguyên:
- static String toString(int i, int radix) - sẽ chuyển đổi i thành biểu diễn chuỗi trong hệ thống số cơ số.
System.out.println(Integer.toString(5, 2)); // 101
Lớp Integer có một số phương thức để tìm giá trị lớn nhất/nhỏ nhất của hai số:
- static int max(int a, int b) sẽ trả về giá trị lớn nhất trong số các biến được truyền;
- static int min(int a, int b) sẽ trả về giá trị nhỏ nhất trong số các biến được truyền.
int x = 4;
int y = 40;
System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4
Phần kết luận
Trong bài viết này chúng ta đã xem xét lớp Integer. Chúng ta đã nói về loại lớp này và lớp bao bọc là gì. Chúng tôi nhìn lớp học từ góc độ thực tế. Chúng ta đã xem xét các ví dụ về các phép tính số học, bao gồm cả các phép tính so sánh. Chúng ta đã xem xét sự phức tạp của việc so sánh hai biến Số nguyên và xem xét khái niệm về các đối tượng được lưu trong bộ nhớ đệm. Chúng tôi cũng đã đề cập đến hiện tượng tự động đóng gói/giải nén các kiểu dữ liệu nguyên thủy. Ngoài ra, chúng ta đã xem xét một số phương thức của lớp Integer cũng như một số hằng số. Họ đưa ra ví dụ về việc chuyển đổi số từ hệ thống số này sang hệ thống số khác.Bài tập về nhà
-
Nghiên cứu xem có những phương pháp nào khác của lớp Integer (bạn có thể nghiên cứu chúng trên trang web với tài liệu chính thức ), viết vào phần nhận xét phương pháp nào bạn đã nghiên cứu (không bao gồm những phương pháp được đưa ra trong bài viết) theo quan điểm của bạn là hữu ích nhất ( sẽ được bạn sử dụng thường xuyên nhất). Và cũng cung cấp lý do cho ý kiến của bạn.
Tái bút Không có câu trả lời đúng ở đây, nhưng hoạt động này sẽ giúp bạn học bài tốt hơn.
-
Giải quyết một vấn đề nhỏ đơn giản để củng cố tài liệu.
Chúng ta có hai số:
1100001001 - trong hệ thống số nhị phân
33332 - trong hệ thống số ngũ phânĐiều cần thiết là chỉ sử dụng các phương thức của lớp Integer để xác định số lớn nhất trong số hai số đã cho, sau đó hiển thị chênh lệch giữa giá trị lớn nhất và nhỏ nhất trong hệ thống số ba.
-
Chuyển đổi giá trị Số nguyên tối đa có thể sang hệ thống số bát phân và hiển thị số chữ số trong số kết quả (đếm số theo chương trình).
GO TO FULL VERSION