فرق مهم
متغير int يحمل قيمة عددية، بينما متغير نوعه Employee يحمل Reference إلى كائن. الرسم الذي يشبه العنوان في الشريحة نموذج توضيحي، وليس عنوان ذاكرة تتعامل معه مباشرة في Java.
References & Object Assignment
متغير int يحمل قيمة عددية، بينما متغير نوعه Employee يحمل Reference إلى كائن. الرسم الذي يشبه العنوان في الشريحة نموذج توضيحي، وليس عنوان ذاكرة تتعامل معه مباشرة في Java.
ماذا تفعل e2 = e1: تنسخ قيمة المرجع، ولا تنسخ بيانات الكائن إلى كائن جديد. بعدها يصبح e1 وe2 طريقين للوصول إلى الكائن نفسه.
عندما تنفذ e2.setName("Ali") يتغير الكائن المشترك. لهذا تُظهر e1.writeOutput() الاسم Ali أيضًا، رغم أن التعديل كُتب عبر e2.
عند استخدام new مرة أخرى لـe2 نحصل على كائن مستقل. تساوي القيم الابتدائية لا يعني أن الكائنين هما الكائن نفسه.
public class First {
public static void main(String[] args) {
Employee e1 = new Employee("Mohammed", 20, 5000);
Employee e2 = e1;
e1.writeOutput();
e2.setName("Ali");
e1.writeOutput();
e2.writeOutput();
}
}public class Employee {
private String name;
private int age;
private double salary;
public Employee(String n, int a, double s) {
name = n;
age = a;
salary = s;
}
public String getName() { return name; }
public void setName(String n) { name = n; }
public double getSalary() { return salary; }
public void setSalary(double s) { salary = s; }
public void writeOutput() {
System.out.println("Name: " + name + " Age: " + age + " Salary: " + salary);
}
}الإسناد بين المراجع لا يعمل كنسخ كامل للكائن. عدّ مرات new، ثم ارسم أين يشير كل Reference.
غيّر new name، ثم بدّل إنشاء كائن مستقل لـe2. قارن أسماء الكائنات ومعرّف Object في الجدول.
محاكاة لهذا المثال المحدد، وليست تشغيلًا لكود Java عشوائي.