01/10/2018, 15:23

Biến cục bộ (local variable)

như mọi người biết thì C khi khai báo 1 biến cục bộ nếu ta ko khởi tạo giá trị thì ta vẫn sài đc nhưng nó sẽ gán cho ta 1 giá trị rác nhưng trong java nếu ta khai báo 1 biến cục bộ mà ko khởi tạo giá trị thì sẽ gặp lỗi nếu sài nó
dù có là C hay java thì ta có quyền khai báo và cũng có quyền ko sử dụng nó nhưng biến cục bộ trong C thì chắc chắn nó sẽ cấp phát vùng nhớ dù có sài hay ko riêng java thì khác nếu ta khai báo nhưng ko sài thì OS có cấp bộ nhớ cho nó ko ?

Nguyễn Đình Anh viết 17:30 ngày 01/10/2018

chắc chắn nó sẽ cấp phát vùng nhớ dù có sài hay ko riêng java thì khác nếu ta khai báo nhưng ko sài thì OS có cấp bộ nhớ cho nó ko ?

Mình nghĩ là ko Vì nó đâu có giá trị để lưu đâu

Nguyễn Phú Thành viết 17:26 ngày 01/10/2018

mình thấy bài này nói nó có cấp phát dù có sài hay ko

stackoverflow.com
Abhishek Singh

Do unused local variables in a method acquire memory in JVM?

java
asked by Abhishek Singh on 02:22PM - 29 Oct 14

nhưng ngộ cái là nếu là biến class thì cũng như thế à ? vì việc khai báo OBJECT a; như này thì class loader sẽ ko load class lên class area thì JVM làm sao biết cái biến này thuộc kiểu nào ? đằng này nó hiểu OBJECT là gì và coi việc khai báo này là hợp lệ

Trần Hoàn viết 17:38 ngày 01/10/2018

Mình nghĩ object là con trỏ nên nếu chưa initialize thì biến không được allocate.

Trần Ngọc Vĩnh Nhơn viết 17:34 ngày 01/10/2018

Chào bạn Nguyễn Phú Thành. Trong Java, có 2 khái niệm là “khai báo” và “khởi tạo”.
“Khai báo” nghĩa là tạo ra 1 vùng nhớ lưu địa chỉ của vùng nhớ khác ( hay còn gọi là con trỏ )
“Khởi tạo” là tạo ra 1 vùng nhớ lưu giá trị của biến.
Như vậy, khi bạn thực hiện khai báo một biến cục bộ , một con trỏ sẽ được tạo ra. Nhưng chỉ khai bảo đơn thuần như vậy thì con trỏ này sẽ không trỏ đến bất kỳ một địa chỉ của một vùng nhớ cụ thể nào cả. Do đó, biến địa phương này sẽ không xác định giá trị, dù là biến kiểu nguyên thủy (int, double . . .) hay là kiểu object đi chăng nữa, vì nó chỉ có 1 con trỏ mà không trỏ đến vùng nhớ nào cả.
Vậy, câu trả lời là : “Có .OS sẽ cấp cho nó 1 vùng nhớ lưu địa chỉ (hay có nghĩa là cấp cho nó 1 con trỏ”
Lưu ý rằng, nếu bạn khai báo 1 “biến toàn cục” chứ không phải là biến cục bộ, mà không gán giá trị, thì biến này sẽ được khởi tạo luôn giá trị ban đầu, Nếu là biến kiểu Object thì giá trị ban đầu là null, còn nếu là kiểu nguyên thủy thì là 0 đối với int, 0.0 đối với double, null đối với string . . .

Bài liên quan
0