“嗨,阿米戈,又是我,艾莉。很抱歉說了一遍又一遍,但這是 31 世紀地球上的習慣。我想給你更多關於引用變量和將引用變量傳遞給函數的細節(方法)。”
“我準備好了。”
“太好了,那麼聽著。引用變量是任何非原始變量。此類變量僅包含對象引用(對對象的引用)。”
“原始變量包含值,而引用變量存儲對對像或 null 的引用。我說得對嗎?”
“絕對地。”
“參考是什麼?”
“一個對象和一個對象引用之間的關係就像一個人和她的電話號碼之間的關係。電話號碼不是人,但它可以用來打電話給那個人,詢問一些信息,管理她,或者下命令。引用也用於處理對象。所有對像都使用引用相互交互。”
“就好像他們在通過電話互相交談一樣?”
“完全正確。分配原始變量時,會復制值。如果分配引用,則只會復制對象的地址(電話號碼)。不會復制對象本身。 ”
“好,我知道了。”
“引用為您提供了另一個好處:您可以將對象引用傳遞給任何方法,並且該方法將能夠使用該引用通過調用其方法和訪問對象內部的數據來修改(更改)對象。”
示例 1
值 m 和 n 在這裡不變。
public class References
{
public static void main (String[] args)
{
int m = 5; int n = 6;
System.out.println("M=" + m + " N=" + n);
swap(m, n);
System.out.println("M=" + m + " N=" + n);
}
private static void swap(int a, int b)
{
int c = a;
a = b;
b = c;
}
}
|
這就是為什麼。
此代碼類似於左側的代碼
public class References
{
public static void main (String[] args)
{
int m = 5; int n = 6;
System.out.println("M=" + m + " N=" + n);
int a = m, b = n;
int c = a;
a = b;
b = c;
System.out.println("M=" + m + " N=" + n);
}
}
|
"只有值 5 (m) 和 6 (n) 分別賦值給變量A和b;A和b對 m 和 n 一無所知(也不以任何方式影響)。”
“說實話,我現在發現自己什麼都不懂,能再舉幾個例子嗎?”
“使用對象引用,我們可以完成以下操作:”
示例 2
此代碼中對象的數據更改
public class Primitives
{
public static void main(String[] args)
{
Student jen = new Student(); jen.name = "Jen"; jen.age = 21; Student beth = new Student(); beth.name = "Beth"; beth.age = 15;
System.out.println("Jen is " + jen.age);
System.out.println("Beth is " + beth.age);
ageSwap(jen, beth);
System.out.println("Jen is " + jen.age);
System.out.println("Beth is " + beth.age);
}
private static void ageSwap(Student a,
Student b)
{
int c = a.age; a.age = b.age; b.age = c;
}
static class Student
{
String name;
int age;
}
}
|
這就是為什麼。
此代碼類似於左側的代碼
public class Primitives
{
public static void main(String[] args)
{
Student jen = new Student(); jen.name = "Jen"; jen.age = 21; Student beth = new Student(); beth.name = "Beth"; beth.age = 15;
System.out.println("Jen is " + jen.age);
System.out.println("Beth is " + beth.age);
Student a = jen, b = beth;
int c = a.age; a.age = b.age; b.age = c;
System.out.println("Jen is " + jen.age);
System.out.println("Beth is " + beth.age);
}
static class Student
{
String name;
int age;
}
}
|
“對 jen 和 beth 的引用分別分配給變量 a 和 b;a 和 b 更改對象 jen 和 beth 內部的值。”
“而且你可以在其他類中聲明類,對吧?太酷了!”
“但我仍然不太了解其他一切。”
“一切都在適當的時候。”
GO TO FULL VERSION