Ép kiểu trong Java (Type casting)

Ép kiểu là gì?

Ép kiểu là việc gán giá trị của một biến có kiểu dữ liệu này sang biến khác có kiểu dữ liệu khác.

Ví dụ:

float soLe = 19.7f;
int soNguyen = (int)soLe  + 1;

Trong ví dụ trên, giá trị soLe được đổi thành giá trị nguyên 19. Sau đó, nó được cộng với 1 và kết quả là giá trị 20 được lưu vào soNguyen .

Trong Java, có hai loại ép kiểu dữ liệu:

Nới rộng (widening)

Nới rộng (widening): Là quá trình làm tròn số từ kiểu dữ liệu có kích thước nhỏ hơn sang kiểu có kích thước lớn hơn. Kiểu biến đổi này không làm mất thông tin. Ví dụ chuyển từ int sang float. Chuyển kiểu loại này có thế được thực hiện ngầm định bởi trình biên dịch.

byte -> short -> int -> long -> float -> double

public class TestWidening {
    public static void main(String[] args) {
        int i = 100;
        long l = i;    // không yêu cầu chỉ định ép kiểu
        float f = l;   // không yêu cầu chỉ định ép kiểu
        System.out.println("Giá trị Int: " + i); // Giá trị Int: 100
        System.out.println("Giá trị Long: " + l); // Giá trị Long: 100
        System.out.println("Giá trị Float:  " + f); // Giá trị Float: 100.0
    }
}

Thu hẹp (narrowwing)

Thu hẹp (narrowwing): Là quá trình làm tròn số từ kiểu dữ liệu có kích thước lớn hơn sang kiểu có kích thước nhỏ hơn. Kiểu biến đổi này có thể làm mất thông tin như ví dụ ở trên. Chuyển kiểu loại này không thể thực hiện ngầm định bởi trình biên dịch, người dùng phải thực hiện chuyển kiểu tường minh.

double -> float -> long -> int -> short -> byte

public class TestNarrowwing {
public static void main(String[] args) {
double d = 100.04;
long l = (long) d; // yêu cầu chỉ định kiểu dữ liệu (long)
int i = (int) l; // yêu cầu chỉ định kiểu dữ liệu (int)
System.out.println("Giá trị Double: " + d); System.out.println("Giá trị Long: " + l); System.out.println("Giá trị Int: " + i); }
}

Bảng mô tả ép kiểu trong Java

Ép kiểuChuyển sang kiểu
Từ kiểubooleanbyteshortcharint longfloatdouble
booleanNoNoNoNoNoNoNo
byteNoYesCastYesYesYesYes
shortNoCastCastYesYesYesYes
charNoCastCastYesYesYesYes
int NoCastCastCastYesYesYes
longNoCastCastCastCastYesYes
floatNoCastCastCastCastCastYes
doubleNoCastCastCastCastCastCast

Trong đó

  • -: chính nó
  • No: không ép kiểu được
  • Yes: thực hiện ép kiểu nới rộng (widening)
  • Cast: thực hiện ép kiểu thu hẹp (narrowwing)

Related posts:

Spring Security Logout
Custom HTTP Header with the HttpClient
Java Program to find the peak element of an array using Binary Search approach
Converting a Stack Trace to a String in Java
Converting Between an Array and a Set in Java
Spring Security Registration – Resend Verification Email
Spring Cloud Series – The Gateway Pattern
Java Program to Represent Graph Using Adjacency List
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
Java – Get Random Item/Element From a List
ETL with Spring Cloud Data Flow
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Java Program to Implement Ternary Tree
Tránh lỗi NullPointerException trong Java như thế nào?
Guide to Character Encoding
Java Program to Solve a Matching Problem for a Given Specific Case
Spring Boot - Introduction
A Guide to the ViewResolver in Spring MVC
Introduction to Netflix Archaius with Spring Cloud
Using the Map.Entry Java Class
Giới thiệu về Stream API trong Java 8
New in Spring Security OAuth2 – Verify Claims
Java Program to Check Cycle in a Graph using Graph traversal
Java Concurrency Interview Questions and Answers
Finding Max/Min of a List or Collection
Java Program to Implement Pairing Heap
Giới thiệu HATEOAS
Java Program to Implement Park-Miller Random Number Generation Algorithm
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
Spring Boot - Tomcat Deployment
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
XML-Based Injection in Spring

1 Trackback / Pingback

  1. Cơ chế Upcasting và Downcasting trong java – BLOG CHIA SẺ KIẾN THỨC CỦA VIETMX

Comments are closed.