Cùng tìm hiểu về tự động đổi kiểu dữ liệu khi tính toán trong Java. Khi thực hiện các phép toán như cộng trừ nhân chia giữa 2 giá trị thuộc kiểu khác nhau, kiểu dữ liệu của chúng sẽ được tự động thay đổi và bạn sẽ học được cách thức thay đổi hoàn hảo sau bài học này.
Quy tắc tự động đổi kiểu dữ liệu khi tính toán trong Java
Khi thực hiện các phép toán giữa các dữ liệu cùng kiểu, thì phép toán sẽ được thực hiện ngay, ví dụ như phép cộng 1 + 2 chẳng hạn. Tuy nhiên với một phép toán giữa các dữ liệu khác kiểu, ví dụ như 1 + 2.1, thì phép toán sẽ không được thực hiện ngay, mà cần qua một bước chuyển một trong hai dữ liệu trên về cùng một kiểu, để có thể tính toán.
Việc chuyển đổi đổi tự động kiểu dự liệu khi tính toán trong Java tuân thủ theo các quy tắc sau đây:
- Nếu có một giá trị thuộc kiểu double, thì giá trị khác kiểu còn lại cũng được chuyển kiểu về double
- Nếu có một giá trị thuộc kiểu float, thì giá trị khác kiểu còn lại cũng được chuyển kiểu về float
- Nếu có một giá trị thuộc kiểu long, thì giá trị khác kiểu còn lại cũng được chuyển kiểu về long
- Nếu không thuộc một trong ba trường hợp trên, thì cả hai giá trị được chuyển về kiểu int
Theo thứ tự từ 1 đến 4 của các luật trên, thì nếu có một trường hợp nào thỏa mãn thì các trường hợp phía sau sẽ được bỏ qua. Ví dụ, trong phép tính giữa int và float, do luật 1 không thỏa mãn nên luật 2 được kiểm tra, và do luật 2 được thỏa mãn nên các luật 3 và 4 sẽ không cần xét nữa.
Cụ thể hãy xét phép tính sau đây:
double d = 1 * 2.3 ; //2.3 |
Ở bên trái dấu nhân chúng ta có số thuộc kiểu int, và số bên phải thuộc kiểu double (là các kiểu mặc định cho số nguyên và số thực trong Java). Để thực hiện phép toán giữa hai số khác kiểu này, trước hết số 1 thuộc kiểu int sẽ được chuyển sang kiểu double, rồi sau đó mới thực hiện phép nhân double x double. Và kết quả 2.3 sẽ được tính ra.
Lưu ý khi này, do chúng ta đã biết các số sẽ được chuyển về double, và phép nhân giữa hai số double với nhau sẽ tạo ra kết quả cũng là một số double, nên nếu chúng ta khai báo kiểu của biến chứa kết quả không phải ở kiểu double, ví dụ như kiểu int, thì lỗi compile sẽ xảy ra:
int d = 1 * 2.3 ; //Lỗi compile trả về |
Nếu bạn muốn lưu kết quả này dưới dạng kiểu int, hãy sử dụng tới cách ép kiểu double sang int mà chúng ta đã học trong bài Ép kiểu dữ liệu trong Java.
int d = (int)(1 * 2.3) ; //2 |
Chú ý khi chuyển đổi sang kiểu int
Trong trường hợp kiểu của các giá trị trong phép tính đều không thuộc double, float hay long, thì chúng đều được chuyển kiểu sang kiểu int, trước khi được đem tính toán. Cụ thể nhất là phép tính khi cả hai vế của phép tính thuộc kiểu short hay byte chẳng hạn.
Hãy cùng xem ví dụ sau đây:
short s1 = 14; |
Trong phép tính này, do kiểu của s1 và s2 đều không thuộc 1 trong ba kiểu double, float hay long, nên chúng đều được chuyển về int trước khi đem tính toán. Và do đó, chúng ta cần phải chỉ định kiểu của biến i ở dạng int để lưu kết quả phép tính này.
Chú ý, kết quả của short với short không phải là short, nên cách viết sau đây là sai và lỗi compile sẽ bị trả về:
short s1 = 14; |
Nếu muốn kết quả cũng thuộc kiểu short trong trường hợp này, chúng ta cần phải ép kiểu dữ liệu từ int sang short mà chúng ta đã học trong bài Ép kiểu dữ liệu trong Java.
short s1 = 14; |
Tương tự thì chúng ta cũng cần chú ý trong phép tính đổi dấu, với các kiểu dữ liệu không thuộc 1 trong 3 kiểu float, double hay long. Ví dụ, cách viết khi đổi dấu một số thuộc kiểu short sau đây là sai và sẽ dẫn tới lỗi compile.
short s1 = 14; |
Lý do là bởi bằng việc sử dụng toán tử đổi dấu, giá trị s1 thuộc kiểu short đã được tự động chuyển thành kiểu int, do đó chúng ta không thể gán nó vào biến s2 thuộc kiểu short được. Để có thể gán vào s2, chúng ta cần phải tiến hành ép kiểu dữ liệu của -s1 như sau:
short s1 = 14; |
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn về cách thức tự động đổi kiểu dữ liệu khi tính toán trong Java rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về Java trong các bài học tiếp theo.
URL Link
HOME › java cơ bản cho người mới bắt đầu>>09. biến và kiểu dữ liệu trong java