images
09/10/2020 09:01 am

Java Primitives vs. Object

Java là ngôn ngữ lập trình hướng đối tượng, nên dễ hiểu các kiểu dữ liệu của nó đều là đối tượng - Object. Tuy vậy Java tồn tại một số kiểu dữ liệu đặc biệt: byte, char, short, int, long, double, float, boolean thay cho Byte, Character, Short, Integer, Long, Double, Float, Boolean.

Vậy có gì khác nhau? Chúng ta thử so sánh giữa int và Integer để hiểu hơn nhé.


Khởi tạo


int i = 1;

int j = 2;

int k = 3;

Integer i = 1;

Integer j = new Integer(2);

Integer j = new Integer(“2”);

Integer k = Integer.parseInt(3);


Biểu diễn và lưu dữ liệu


int chứa dữ liệu số nguyên với độ dài 32 bits-> 4 bytes

Ví dụ: 3;4;6

Không biểu diễn được số PI = 3.14

Integer là đối tượng - Object chứa dữ liệu là số nguyên (giống int) với các biểu diễn sử dụng 128 bits dữ liệu.


Linh hoạt


int chứa số nguyên và không thể convert sang kiểu dữ liệu khác.

int không thể convert sang Integer

Integer có nhiều phép toán linh hoạt để chuyển đổi sang kiểu dữ liệu int, String, biểu diễn dạng Binary hoặc Hexa…

Ví dụ:


Integer i = new Integer(3);

int j = i.intValue();


Làm việc với các collections


Không thể khai báo collections với int. Ví dụ bạn làm như sau sẽ bị lỗi:
Map<int, int>, List<int>...

Integer cho phép dễ dàng khởi tạo collections như:
Map<Integer, Integer>, List<Integer>


Autoboxing vs Unboxing


Autoboxing là tính năng cho phép chuyển kiểu dữ liệu từ primitives sang object.

Unboxing là kiểu chuyển đổi dữ liệu từ object sang primitives.


Integer i = 1; // Autoboxing: cho phép kiểu int chuyển thành object.

int j = i; // Unboxing: cho phép chuyển từ object sang int;


List<Integer> list = new ArrayList<>();

list.add(1); //autoboxing;


// Cho phép chuyển đổi qua lại giữa Object và primitives:

int sum1 = i + j;

Integer sum2 = i + j;


Nhận xét


- Bạn nên sử dụng kiểu dữ liệu Primitives vì dữ liệu được lưu với dung lượng nhỏ hơn so với object nên tiết kiệm bộ nhớ và chạy nhanh hơn.


- Buộc phải sử dụng Object (ví dụ Integer thay cho int) khi sử dụng với các class về collections


- Mặc định của int là 0; mặc định của Object là null. Nên đôi khi bạn cần sử dụng Object trong trường hợp muốn biết trường dữ liệu này đã được khởi tạo hay chưa (check null)


Thử code cho vui


Integer j = new Integer(2);

Integer j2 = new Integer("2");


System.out.println(j == j2);               // Kết quả true hay false?


public static void main(String[] args) {

   function(1); // Hàm nào được gọi?

}


static void function(int i) {

   System.out.println("function 1");

}

static void function(Integer i) {

   System.out.println("function 2");

}


Mời các bạn đọc thêm bài Java Lambda và Stream với list.


- Tech Zone -


Thư giãn chút nào!!!

Bài viết liên quan