引用傳遞是java的整體核心
如果不懂引用傳遞。基本上所有的代碼都無法進行正常的分析。下面使用3個簡單程序來對引用傳遞做一個完整的分析。
范例 1:第一道引用傳遞 (對象的引用)
class Message{
private int num;
public void setNum(int num){
this.num = num;
}
public int getNum(){
return this.num;
}
}
public class Test{
public static void main(String[] args){
Message msg = new Message();
msg.setNum(100);
fun(msg);
System.out.println(msg.getNum());
}
public static void fun(Message temp){ //引用傳遞
temp.setNum(30);
}
}
結果: 30
下面通過內存關系圖來進行分析:
09.png
范例 2:第二道引用傳遞 (字符串的引用)
public class Test{
public static void main(String[] args){
String str = "hello";
fun(str);
System.out.println(str);
}
public static void fun(String temp){ //引用傳遞
temp = "word";
}
}
結果:hello
本題目分析的關鍵在于:字符串常量一旦聲明則不可改變,字符串對象的內容的改變依靠的是地址的引用關系變更。
下面通過內存關系圖來進行分析:
10.png
范例 3:第三道引用傳遞 (對象and字符串的引用)
class Message{
private String note;
public void setNote(String note){
this.note = note;
}
public String getNote(){
return this.note;
}
}
public class Test{
public static void main(String[] args){
Message msg = new Message();
msg.setNote("Hello");
fun(msg);
System.out.println(msg.getNote());
}
public static void fun(Message temp){ //引用傳遞
temp.setNote("world");
}
}
結果:world
如果要想對以上的方法進行分析,一定要有一個前提:把String類的使用當作一個基本數據類型那樣來操作。
下面通過內存關系圖來進行分析:(按照基本數據類型分析)
11.png
String是引用類型,不應該按照基本數據類型那樣來進行分析,應該按照引用類型來進行分析。
下面通過內存關系圖來進行分析:(按照引用數據類型分析)
12.png
總結:
對于字符串最簡單的做法是按照基本數據類型那樣來進行分析。