Xin chào, Amigo! Tôi muốn nói với bạn về cấu trúc bên trong của các biến. Như bạn đã biết, mỗi biến được liên kết với một vùng bộ nhớ nơi giá trị của nó được lưu trữ. "

"Vâng. Lần trước anh đã nói với em về chuyện đó."

"Tuyệt. Anh còn nhớ là tốt rồi. Vậy tôi sẽ tiếp tục."

"Tất cả các loại tổng hợp bao gồm các loại đơn giản hơn. Và đến lượt chúng, chúng bao gồm các loại thậm chí còn đơn giản hơn. Cuối cùng, cho đến khi chúng ta kết thúc với các loại nguyên thủy , không thể đơn giản hóa hơn nữa. Đó là những gì chúng được gọi - các loại nguyên thủy . Vì ví dụ, int là một kiểu nguyên thủy, nhưng String là một kiểu tổng hợp lưu trữ dữ liệu của nó dưới dạng một bảng ký tự (trong đó mỗi ký tự là một kiểu nguyên thủy char )."

"Rất thú vị. Tiếp tục đi."

"Các loại hỗn hợp được hình thành bằng cách nhóm các loại đơn giản. Chúng tôi gọi các loại như vậy là các lớp . Khi chúng tôi định nghĩa một lớp mới trong một chương trình, chúng tôi khai báo một loại dữ liệu hỗn hợp mới . Dữ liệu của nó sẽ là các loại hỗn hợp khác hoặc các loại nguyên thủy."

mã Java Sự miêu tả
public class Person
{
   String name;
   int age;
}
Một loại hỗn hợp mới được khai báo – Person.
Dữ liệu của nó được lưu trữ trong Stringbiến (kiểu tổng hợp) nameintbiến (kiểu nguyên thủy)age
public class Rectangle
{
   int x, y, width, height;
}
Một loại hỗn hợp mới được khai báo – Rectangle.
Nó bao gồm bốn intbiến (kiểu nguyên thủy).
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Một loại hỗn hợp mới được khai báo – Cat. Nó có các biến sau:
owner, kiểu hỗn hợp Person
territory, kiểu hỗn hợp Rectangle
age, kiểu nguyên thủy int
name, kiểu hỗn hợpString

"Hiện tại, mọi thứ đều rõ ràng, tuy nhiên nó có vẻ kỳ lạ."

"Các loại lớn (tổng hợp) chứa nhiều loại nhỏ (nguyên thủy). Đó là lý do tại sao các đối tượng thuộc các loại này chiếm nhiều bộ nhớ - nhiều hơn các biến của các loại nguyên thủy. Đôi khi nhiều hơn thế. Việc thực hiện các thao tác gán với các biến như vậy thường mất nhiều thời gian thời gian và yêu cầu sao chép các phần lớn của bộ nhớ.Đó là lý do tại sao các biến của các loại hỗn hợp không lưu trữ chính đối tượng, mà chỉ là một tham chiếu đến nó, tức là địa chỉ bốn byte của nó.Điều này là đủ để giải quyết dữ liệu trong các đối tượng như vậy. Máy Java xử lý tất cả các vấn đề phức tạp liên quan."

"Tôi không hiểu bất cứ điều gì trong số đó."

"Trước đây chúng tôi đã nói rằng biến số giống như một cái hộp. Nếu bạn muốn lưu trữ số 13 trong đó, bạn có thể viết 13 trên một tờ giấy và đặt nó vào hộp."

"Nhưng hãy tưởng tượng rằng bạn cần cất một thứ gì đó lớn hơn trong hộp (có thể thay đổi). Ví dụ: một con chó, một chiếc ô tô hoặc hàng xóm của bạn. Thay vì cố gắng đẩy những thứ không thể đẩy được vào hộp, bạn có thể làm điều gì đó dễ dàng hơn: sử dụng một bức ảnh của con chó thay vì con chó thật, biển số xe thay vì xe thật, hoặc số điện thoại của hàng xóm thay vì hàng xóm của bạn."

"Chúng tôi lấy một tờ giấy và viết số điện thoại của hàng xóm. Điều này giống như một tham chiếu đến một đối tượng. Nếu chúng tôi sao chép mảnh giấy có số điện thoại của hàng xóm trên đó và đặt nó vào một số hộp, thì bây giờ sẽ có nhiều tài liệu tham khảo hơn. với hàng xóm của bạn. Nhưng, như trước đây, bạn vẫn chỉ có một người hàng xóm. Điều đó có lý, phải không?"

"Một tính năng quan trọng của việc lưu trữ dữ liệu theo cách này là bạn có thể có nhiều tham chiếu đến một đối tượng "

"Thật thú vị! Tôi sắp hiểu được rồi. Làm ơn cho tôi biết thêm một lần nữa - điều gì sẽ xảy ra nếu tôi gán một biến thuộc loại hỗn hợp cho một biến khác thuộc cùng loại hỗn hợp?"

"Sau đó, hai biến sẽ lưu trữ cùng một địa chỉ. Điều đó có nghĩa là nếu bạn thay đổi dữ liệu của đối tượng được tham chiếu bởi một biến, bạn sẽ thay đổi dữ liệu được tham chiếu bởi biến kia . Cả hai biến đều tham chiếu cùng một đối tượng . Tất nhiên, có thể có nhiều các biến khác cũng lưu trữ các tham chiếu đến nó."

"Các biến của các loại hỗn hợp (tham chiếu/lớp) sẽ làm gì nếu chúng không giữ tham chiếu đến một đối tượng? Điều đó có khả thi không?"

"Vâng, Amigo. Bạn đang nói trước tôi về câu hỏi của mình. Điều đó là có thể. Nếu một biến thuộc loại tham chiếu (tổng hợp) không lưu trữ tham chiếu đến một đối tượng, thì nó sẽ lưu trữ cái được gọi là 'null' Reference'. Về cơ bản, điều này có nghĩa là nó tham chiếu đến một đối tượng có địa chỉ là 0. Tuy nhiên, máy Java không bao giờ tạo các đối tượng có địa chỉ này, vì vậy nó luôn biết rằng nếu một biến tham chiếu chứa 0, thì nó không trỏ đến bất kỳ đối tượng nào. ."

mã Java Sự miêu tả
String s;
String s = null;
Báo cáo tương đương.
Person person;
person = new Person();
person = null;
Chúng tôi tạo một biến người có giá trị là null.
Chúng ta gán cho nó địa chỉ của đối tượng Person mới được tạo.
Chúng tôi gán null cho biến.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Chúng ta tạo một đối tượng Cat và lưu trữ địa chỉ của nó trong biến cat; cat.owner bằng null.
Chúng tôi đặt cat.owner bằng địa chỉ của đối tượng Người mới được tạo.
cat.owner.name vẫn bằng null.
Chúng tôi đặt cat.owner.name bằng "Chúa"

"Tôi đã hiểu đúng ý bạn chưa? Các biến được chia thành hai loại: kiểu nguyên thủy và kiểu tham chiếu. Kiểu nguyên thủy lưu trữ giá trị trực tiếp, trong khi kiểu tham chiếu lưu trữ tham chiếu đến một đối tượng. Kiểu nguyên thủy bao gồm int, char, boolean và nhiều loại khác. Tham khảo các loại bao gồm mọi thứ khác. Chúng tôi sử dụng các lớp để tạo chúng."

"Con hoàn toàn đúng, con trai."

"Vì vậy, bạn nói rằng bạn đã hiểu tất cả mọi thứ. Đây là một số nhiệm vụ để giúp bạn củng cố kiến ​​​​thức của mình."