引用传递是Java的整体核心,如果不懂引用传递,基本上所有的代码都无法进行正常分析。三个引用传递分析例子。
范例: 第一个引用传递分析
class Message {
private int num;
public void setNum(int num){
this.num = num;
}
public int getNum() {
return this.num;
}
}
public class StringDemo {
public static void main(String args[]) {
Message msg = new Message();
msg.setNum(100);
fun(msg);
System.out.println(msg.getNum()); //30
}
public static void fun(Message temp) { //引用传递
temp.setNum(30);
}
}
内存分析:
范例: 第二个
public class StringDemo {
public static void main(String args[]) {
String str = "hello";
fun(str);
System.out.println(str); //hello
}
public static void fun(String temp) {
temp = "world";
}
}
字符串常量一旦声明则不可改变,字符串对象的内容改变依靠的是地址的引用关系变更。有新字符串常量出现一定先存到一个新的堆内存。
范例: 第三个
class Message {
private String note;
public void setNote(String note) {
this.note = note;
}
public String getNote() {
return this.note;
}
}
public class StringDemo {
public static void main(String args[]) {
Message msg = new Message();
msg.setNote("hello");
fun(msg);
System.out.println(str); //world
}
public static void fun(Message temp) { //引用传递
temp.setNote("world");
}
}
如果要对以上代码进行分析,一定要有个前提:先把String类的使用当作基本数据类型那样来操作:
String是引用类型,不应该按照基本类型那样分析:
但是对于字符串最简单的做法是按照基本数据类型那样进行分析。