CodeGym /Blog Java /Ngẫu nhiên /Truyền kiểu Java

Truyền kiểu Java

Xuất bản trong nhóm

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.
Truyền kiểu Java là một quá trình trong đó một kiểu dữ liệu được chuyển đổi sang kiểu dữ liệu khác.
Nó có thể vừa ngầm vừa rõ ràng . Việc đánh máy ngầm còn được gọi là việc đánh máy tự động được thực hiện bởi trình biên dịch. Việc định kiểu rõ ràng được lập trình viên thực hiện thủ công trong mã.

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.
  1. Đúc kiểu mở rộng - Còn được gọi là Đúc kiểu ngầm hoặc tự động
  2. Đú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 , bytechar . Sau đó, chúng tôi gán các giá trị int cho a longfloat , cả hai đều lớn hơn int . Chúng tôi cũng đã gán giá trị bytechar cho int . Cả bytechar đề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

Giải trình

Việc thu hẹp việc định kiểu cần phải được lập trình viên thực hiện một cách rõ ràng bằng cách sử dụng cú pháp tiêu chuẩn. Trong chương trình trên, chúng ta đã bắt đầu với giá trị double lớn hơn kiểu dữ liệu longint . Chúng tôi đã đánh máy double thành longint bằng cách sử dụng dấu ngoặc đơn với các kiểu dữ liệu đích mong muốn. Chúng tôi cũng đã gõ thủ công 'int' thành 'char'.

Phần kết luận

Đến cuối bài đăng này, chúng tôi hy vọng bạn đã làm quen một cách chi tiết với Java Type Casting. Bạn đã học được hai kiểu typecasting trong java. Bạn cũng đã học cách truyền thủ công các loại dữ liệu không tương thích bằng cách sử dụng phương pháp thu hẹp kiểu chữ. Bạn có thể tự mình thử kết hợp các loại dữ liệu khác với các giá trị khác nhau để hiểu sâu hơn. Tiếp tục thực hành để hiểu sâu hơn về khái niệm này. Cho đến lúc đó, hãy tiếp tục phát triển và tiếp tục tỏa sáng!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION