引用传递是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
下面通过内存关系图来进行分析:
范例 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
本题目分析的关键在于:字符串常量一旦声明则不可改变,字符串对象的内容的改变依靠的是地址的引用关系变更。
下面通过内存关系图来进行分析:
范例 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类的使用当作一个基本数据类型那样来操作。
下面通过内存关系图来进行分析:(按照基本数据类型分析)
String是引用类型,不应该按照基本数据类型那样来进行分析,应该按照引用类型来进行分析。
下面通过内存关系图来进行分析:(按照引用数据类型分析)
总结:
对于字符串最简单的做法是按照基本数据类型那样来进行分析。