Kiểu dữ liệu và ép kiểu trong JAVA

JAVA INSTALL

W3School

Kiểu dữ liệu trong JAVA

Như đã giải thích trong bài trước, một biến trong Java phải là một kiểu dữ liệu được chỉ định:

int myNum = 5;               // Integer (whole number)
float myFloatNum = 5.99f;    // Floating point number
char myLetter = 'D';         // Character
boolean myBool = true;       // Boolean
String myText = "Hello";     // String

Các kiểu dữ liệu được chia thành hai nhóm:

  • Các kiểu dữ liệu nguyên thuỷ (Primitive) – bao gồm byteshortintlongfloatdoubleboolean và char
  • Các kiểu dữ liệu không nguyên thủy (Non-primitive) – chẳng hạn như Sring, Arrays và Classes( bạn sẽ tìm hiểu thêm về những kiểu này trong các bài sau)

Kiểu dữ liệu nguyên thuỷ (Primitive)

Kiểu dữ liệu nguyên thủy chỉ định kích thước và kiểu của các giá trị biến và nó không có phương thức bổ sung.

Có tám kiểu dữ liệu nguyên thủy trong Java:

Data TypeSizeDescription
byte1 byteLưu trữ các số nguyên từ -128 đến 127
short2 bytesLưu trữ các số nguyên từ -32,768 đến 32,767
int4 bytesLưu trữ các số nguyên từ -2,147,483,648 đến 2,147,483,647
long8 bytesLưu trữ các số nguyên từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807
float4 bytesLưu trữ số dạng phân số. Đủ để lưu trữ từ 6 đến 7 chữ số thập phân. VD: 6.7
double8 bytesLưu trữ số phân số. Đủ để lưu trữ 15 chữ số thập phân
boolean1 bitLưu trữ các giá trị đúng hoặc sai
char2 bytesLưu trữ một ký tự / chữ cái hoặc các giá trị ASCII

Kiểu số trong Java

Các kiểu số nguyên thủy (Primitive number types) được chia thành hai nhóm:

Loại số nguyên (Integer types) lưu trữ các số nguyên, dương hoặc âm (chẳng hạn như 123 hoặc -456), không có phần thập phân. Các loại hợp lệ là byteshort, int và long. Bạn nên sử dụng kiểu phù hợp với giá trị số của bạn.

Các kiểu dấu phẩy động (Floating point types) biểu thị các số có phần thập phân, chứa một hoặc nhiều số thập phân. Có hai loại: float và double.

Mặc dù có nhiều kiểu số trong Java, nhưng kiểu số được sử dụng nhiều nhất là int(cho số nguyên) và double(cho số dấu phẩy động). Tuy nhiên, chúng tôi sẽ mô tả tất cả trong bài giảng.

Các loại số nguyên (Integer types)

Byte

Kiểu byte dữ liệu có thể lưu trữ các số nguyên từ -128 đến 127. Kiểu này có thể được sử dụng thay vì int hoặc các kiểu số nguyên khác để tiết kiệm bộ nhớ khi bạn chắc chắn rằng giá trị sẽ nằm trong -128 và 127:

byte myNum = 100;
System.out.println(myNum);

Short

Kiểu short dữ liệu có thể lưu trữ các số nguyên từ -32768 đến 32767:

short myNum = 5000;
System.out.println(myNum);

Int

Kiểu int dữ liệu có thể lưu trữ các số nguyên từ -2147483648 đến 2147483647. Nói chung và trong hướng dẫn của chúng tôi, kiểu dữ liệu int là kiểu dữ liệu được ưu tiên khi chúng ta tạo các biến có giá trị số.

int myNum = 100000;
System.out.println(myNum);

Long

Kiểu long dữ liệu có thể lưu trữ các số nguyên từ -9223372036854775808 đến 9223372036854775807. Kiểu này được sử dụng khi int không đủ lớn để lưu giá trị. Lưu ý rằng bạn nên kết thúc giá trị bằng “L”:

long myNum = 15000000000L;
System.out.println(myNum);

Các loại dấu chấm động (Floating point types)

Bạn nên sử dụng kiểu dấu phẩy động bất cứ khi nào bạn cần một số có phần thập phân, chẳng hạn như 9,99 hoặc 3,14515.

Kiểu dữ liệu float và double có thể lưu trữ số phân số. Lưu ý rằng bạn nên kết thúc giá trị bằng “f” cho float và “d” cho double:

float myNum = 5.75f;
System.out.println(myNum);
double myNum = 19.99d;
System.out.println(myNum);

Sử dụng float hay double?

Độ chính xác của giá trị dấu phẩy động cho biết giá trị có thể có bao nhiêu chữ số sau dấu thập phân. Độ chính xác của float chỉ là sáu hoặc bảy chữ số thập phân, trong khi các biến double có độ chính xác khoảng 15 chữ số. Do đó sẽ an toàn hơn khi sử dụng double cho hầu hết các phép tính.

Scientific Numbers

Một số dấu phẩy động cũng có thể là một số khoa học với chữ “e” để biểu thị lũy thừa của 10:

float f1 = 35e3f; // 35000.0
double d1 = 12E4d; // 120000.0
System.out.println(f1);
System.out.println(d1);

Boolean Types

Kiểu dữ liệu boolean được khai báo với từ khóa boolean và chỉ có thể nhận các giá trị true hoặc false (Đúng hoặc sai):

boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println(isJavaFun);     // Outputs true
System.out.println(isFishTasty);   // Outputs false

Giá trị boolean chủ yếu được sử dụng để kiểm tra có điều kiện, bạn sẽ tìm hiểu thêm về điều này trong bài sau.

Characters

Kiểu dữ liệu char được sử dụng để lưu trữ một ký tự. Ký tự phải được bao quanh bởi các dấu ngoặc đơn, như ‘A’ hoặc ‘c’:

char myGrade = 'B';
System.out.println(myGrade);

Ngoài ra, nếu bạn đã quen với các giá trị ASCII, bạn có thể sử dụng các giá trị đó để hiển thị các ký tự nhất định:

char myVar1 = 65, myVar2 = 66, myVar3 = 67;
System.out.println(myVar1); // A
System.out.println(myVar2); // B
System.out.println(myVar3); // C

Mẹo: Bạn có thể tìm thấy danh sách tất cả các giá trị ASCII trong Tham chiếu Bảng ASCII của chúng tôi.

Strings

Kiểu dữ liệu String được sử dụng để lưu trữ một chuỗi ký tự (văn bản). Giá trị chuỗi phải được bao quanh bởi dấu ngoặc kép:

String greeting = "Hello World";
System.out.println(greeting);

Kiểu String được sử dụng và tích hợp rất nhiều trong Java, đến nỗi một số người gọi nó là “kiểu thứ chín đặc biệt”. String  trong Java thực sự là một kiểu dữ liệu không nguyên thủy, vì nó tham chiếu đến một đối tượng. Đối tượng String có các phương thức được sử dụng để thực hiện các hoạt động nhất định trên chuỗi. Đừng lo lắng nếu bạn chưa hiểu thuật ngữ “đối tượng”. Chúng ta sẽ tìm hiểu thêm về chuỗi và đối tượng trong các bài sau.

Các kiểu dữ liệu không nguyên thủy của Java

Các kiểu dữ liệu không nguyên thủy được gọi là kiểu tham chiếu vì chúng tham chiếu đến các đối tượng.

Sự khác biệt chính giữa kiểu dữ liệu nguyên thủy và không nguyên thủy là:

  • Các kiểu nguyên thủy được xác định trước (đã được định nghĩa) trong Java. Các kiểu không nguyên thủy được tạo bởi lập trình viên và không được định nghĩa bởi Java (ngoại trừ String).
  • Các kiểu không nguyên thủy có thể được sử dụng để gọi các phương thức để thực hiện một số hoạt động nhất định, trong khi các kiểu nguyên thủy thì không thể.
  • Một kiểu nguyên thủy luôn có một giá trị, trong khi các kiểu không nguyên thủy có thể có null.
  • Kiểu nguyên thủy bắt đầu bằng chữ thường, trong khi kiểu không nguyên thủy bắt đầu bằng chữ hoa.
  • Kích thước của kiểu nguyên thủy phụ thuộc vào kiểu dữ liệu, trong khi các kiểu không nguyên thủy có cùng kích thước.

Ép kiểu trong Java

Ép kiểu là khi bạn gán giá trị của một kiểu dữ liệu nguyên thủy cho một kiểu khác.

Trong Java, có hai kiểu ép kiểu:

  • Widening Casting (tự động) – chuyển đổi loại nhỏ hơn thành kích thước loại lớn hơn
    byte-> short-> char-> int-> long-> float->double
  • Narrowing Casting (thủ công) – chuyển đổi loại lớn hơn sang loại kích thước nhỏ hơn
    double-> float-> long-> int-> char-> short->byte

Widening Casting

Widening Casting được thực hiện tự động khi chuyển loại kích thước nhỏ hơn sang loại kích thước lớn hơn:

public class Main {
  public static void main(String[] args) {
    int myInt = 9;
    double myDouble = myInt; // Automatic casting: int to double

    System.out.println(myInt);      // Outputs 9
    System.out.println(myDouble);   // Outputs 9.0
  }
}

Narrowing Casting

Narrowing Casting phải được thực hiện theo cách thủ công bằng cách đặt loại trong dấu ngoặc đơn ở phía trước giá trị:

public class Main {
  public static void main(String[] args) {
    double myDouble = 9.78d;
    int myInt = (int) myDouble; // Manual casting: double to int

    System.out.println(myDouble);   // Outputs 9.78
    System.out.println(myInt);      // Outputs 9
  }
}

W3School

Leave a Reply

Your email address will not be published. Required fields are marked *