Truyền kiểu trong Java là gì?
Kiểu dữ liệu là một tập hợp các giá trị được xác định trước, chỉ định loại giá trị có thể được lưu trữ trong đó cùng với thao tác có thể được thực hiện trên chúng.Tại sao cần phải ép kiểu?
Java có các kiểu dữ liệu nguyên thủy khác nhau yêu cầu các khoảng trống khác nhau trong bộ nhớ. Điều này có thể gây ra sự cố tương thích khi gán giá trị của loại dữ liệu này cho loại dữ liệu khác. Nếu các kiểu dữ liệu đã tương thích, việc gõ kiểu sẽ được trình biên dịch thực hiện tự động. Do đó, typecasting giải quyết được vấn đề tương thích chính khi xử lý các loại dữ liệu khác nhau trong chương trình của chúng ta.Các kiểu truyền kiểu Java
Có hai kiểu truyền kiểu trong Java.- Đúc kiểu mở rộng - Còn được gọi là Đúc kiểu ngầm hoặc tự động
- Đúc kiểu thu hẹp - Còn được gọi là Đúc kiểu rõ ràng hoặc thủ công
Đúc loại mở rộng
Mở rộng việc định kiểu, như tên cho thấy, đề cập đến việc mở rộng kiểu dữ liệu nhỏ hơn thành kiểu dữ liệu lớn hơn. Chúng tôi thực hiện việc định kiểu này khi chúng tôi muốn chuyển đổi loại nhỏ thành loại lớn. Các kiểu dữ liệu phải tương thích với nhau. Không có sự chuyển đổi ngầm định từ kiểu số sang kiểu char hoặc boolean. Trong Java, các kiểu char và boolean không tương thích.
byte -> ngắn -> char -> int -> dài -> float -> double
Kiểu truyền này được trình biên dịch thực hiện tự động mà không làm mất thông tin. Nó không yêu cầu bất kỳ sự kích hoạt bên ngoài nào của người lập trình.
Ví dụ
//Automatic type conversion
public class WideningExample {
public static void main(String[] args) {
int i = 100;
System.out.println("int value: " + i);
// int to long type
long l = i;
System.out.println("int to long value: " + l);
// long to float type
float f = l;
System.out.println("int to float value: " + f);
byte b = 1;
System.out.println("byte value: " + b);
// byte to int type
i = b;
System.out.println("byte to int value: " + i);
char c = 'a';
System.out.println("char value: " + c);
// char to int type
i = c;
// prints the ASCII value of the given character
// ASCII value of 'a' = 97
System.out.println("char to int value: " + i);
}
}
đầu ra
giá trị int: 100
giá trị int đến dài: 100
giá trị int thành float: 100.0
giá trị byte: 1
Giá trị byte thành int: 1
giá trị char: a
giá trị char thành int: 97
Giải trình
Trong đoạn mã trên, chúng tôi đã hiển thị việc mở rộng kiểu chữ được trình biên dịch thực hiện tự động. Trước hết, chúng tôi đã gán các giá trị cho int , byte và char . Sau đó, chúng tôi gán các giá trị int cho a long và float , cả hai đều lớn hơn int . Chúng tôi cũng đã gán giá trị byte và char cho int . Cả byte và char đều là các kiểu dữ liệu nhỏ hơn int , do đó, những chuyển đổi này là ẩn.Thu hẹp kiểu đúc
Thu hẹp kiểu chữ, như tên cho thấy, đề cập đến việc thu hẹp kiểu dữ liệu lớn hơn thành kiểu dữ liệu nhỏ hơn. Chúng tôi thực hiện việc định kiểu này khi chúng tôi muốn chuyển đổi loại lớn thành loại nhỏ.double -> float -> long -> int -> char -> short -> byte
Đối với kiểu truyền này, chúng tôi ghi đè chuyển đổi mặc định của Java bằng cách chỉ định chuyển đổi của riêng chúng tôi. Để đạt được điều này, chúng ta viết biến hoặc giá trị cần được đánh máy trước kiểu dữ liệu đích trong dấu ngoặc đơn '()'. Tuy nhiên, kiểu đúc này có thể dẫn đến mất độ chính xác.
Ví dụ
//Manual Type Conversion
public class NarrowingExample {
public static void main(String[] arg) {
// double data type
double d = 97.04;
// Print statements
System.out.println("double value: " + d);
// Narrowing type casting from double to long
// implicitly writing the target data type in () followed by initial data type
long l = (long) d;
// fractional part lost - loss of precision
System.out.println("long value: " + l);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
int i = (int) l;
// fractional part lost - loss of precision
System.out.println("int value: " + i);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
char c = (char) i;
// displaying character corresponding to the ASCII value of 100
System.out.println("char value: " + c);
}
}
đầu ra
giá trị kép: 97,04
giá trị dài: 97
giá trị int: 97
giá trị char: a
GO TO FULL VERSION