Tại sao lại như vậy mọi người nhỉ? sao lại gán là 0?
Tại sao giá trị mặc định của kiểu dữ liệu int trong java lại bằng 0?
Thì nếu không phải là 0 thì bạn nghĩ là số gì? Cái này được gọi là zero value
. Nó có nghĩa là nếu như 1 biến được khởi tạo mà không có giá trị để khởi tạo, thì nó sẽ tự động được gán 1 giá trị mặc định (cái zero value
). Ví dụ: Nếu bạn khởi tạo 1 biến string mà không đưa 1 string để khởi tạo nó, thì nó sẽ mặc định có giá trị là ""
.
Hm, nó giống với việc giá trị mặc định của 1 cái đèn là “tắt” cậu ạ
Btw, cậu có vấn đề gì với giá trị mặc định của dữ liệu int trong java bằng 0 không? Và cậu có suggest gì tốt hơn 0 về giá trị mặc định của kiểu int trong Java không?
mình không, chỉ là luôn đặt câu hỏi Tại sao? thôi, mình đang muốn tìm hiểu sâu hơn về java, muốn xem cách thức hoạt động trong code nó như nào, câu trên của mình có thể hỏi khác là java tự động gán giá trị mặc định cho biến kiểu int chưa value như nào ?
Kiểu int
là kiểu nguyên thủy (primitive) nên nó luôn có giá trị thực thế.
Các kiểu nguyên thủy luôn có giá trị mặc định != null
vì nó sẽ gán giá trị tương đương với 0
boolean: false (false tương đương với 0)
char: '\0'
byte, short, int, long, float, double: 0
Còn lại giá trị kiểu đối tượng thì mặc định là null
. Tức là nó chưa tham chiếu đến 1 thực thể cụ thể nào.
Primitive khi khai báo là field của class nó mới tự động assign bằng giá trị default. trong method thì tự init nhé.
Nguyên nhân:
Class loader load class khi start app, nên toàn bộ field điều chưa được dùng ở bất cứ đâu, lúc này nó auto gán giá trị mặc định cho toàn bộ các field.
Khi variable nằm trong method, complier không hiểu method sẽ được gọi theo trình tự(runtime) như thế nào, nên không thể gán được, nó sẽ bảo lỗi complie ngay.
char: ‘\0’ -> value này là 0 hoặc tương đương 0 à bạn?
Đúng vậy bạn à, kí tự \0
(tên gọi là NUL
) chính là kí tự đầu tiên và có giá trị là 0. Đây là kí tự không hiển thị được.