引用传递进阶分析

引用传递是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

总结:

对于字符串最简单的做法是按照基本数据类型那样来进行分析。

你可能感兴趣的:(引用传递进阶分析)