+1

Các kiểu dữ liệu trong java

Trong java có 2 kiểu dữ liệu: Nguyên thủy ( Primitive Types) và tham chiếu (Reference Types)

Các kiểu dữ liệu nguyên thủy gồm:

  • boolean
  • char
  • byte ( byte lưu từ -128->127)
  • short
  • int
  • long
  • float
  • double

Hừm, nhìn chung các kiểu dữ liệu này khá là quen thuộc với chúng ta, chỉ có 1 lưu ý như sau:

float và double đều để lưu trữ giá trị thập phân, tuy nhiên float dùng 32 bít để lưu, double dùng 64 bit để lưu nên có độ chính xác cao hơn

nếu ta khai báo 1 biến thập phân trong java thì mặc định nó là kiểu double:

    double d = 1.0;
    float f1 = 1.9f;
    float f1 = 1.9; --> error

Thêm 1 lưu ý là cả float và double đều không hiển thị 1 các chính xá giá trị. Nếu ta viết như sau thì sẽ thu lại được kết quả sai: System.out.println(2.0d - 1.1d); --> 0.8999999999999999

--> Khuyên dùng BigDecimal

    BigDecimal b1 = new BigDecimal("2.0");
    BigDecimal b2 = new BigDecimal("1.1");
    System.out.println(b1.subtract(b2).floatValue());

Khi so sánh 2 biến dữ liệu nguyên thủy nó sẽ so sánh giá trị thực tế mà biến lưu trữ trong bộ nhớ

Kiểu dữ liệu tham chiếu

Kiểu dữ liệu tham chiếu để lưu các kiểu dữ liệu phức tạp hơn, ngoài ra nó còn để xử lý trường hợp NULL giá trị trong các Dto nhận từ frontend khi so sánh 2 giá trị thì nó sẽ so sánh địa chỉ ô nhớ mà biến trỏ đến. Cùng hiểu rõ qua ví dụ sau:

    Student student1 = new Student("dat", 23);
    Student student1_ = new Student("dat", 23);
    Student student2 = new Student("thao", 21);
    System.out.println(student1== student2); --> false
    System.out.println(student1== student1_); --> true

Còn nếu so sánh dùng hàm equal và trong class student ta Override lại hàm equal như này thì ta sẽ thu được kết quả so sánh đúng nếu student cùng tên và tuổi:

    public boolean equals(Object obj) {
            if(obj.getClass() != Student.class){
                return false;
            }
            Student student = (Student)obj;
            return this.name.equals(student.getName()) && this.age == student.getAge();
    }
    System.out.println(student1.equals(student1_)); --> true
    System.out.println(student1.equals(student2)); -->  false

Khi khai báo, nếu ta khai báo 2 biến tham chiếu bằng nhau --> chúng trỏ đến 1 vùng nhớ, thay đổi 1 trong 2 thì cả 2 sẽ thay đổi:

    int [] arr1 = new int[]{1,2};
    int [] arr2 = arr1; // redundant
    student2 = student1; // redundant
    arr1[0] = 2;
    System.out.println(arr2[0]); --> 2
    System.out.println(student2.getName()); --> dat
`

Ok, bài đầu đến đấy thôi, hẹn gặp lại các bạn trong các bài viết tiếp theo trong seri "gia va co" nhé 😁

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí