引用传递进阶分析

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

总结:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引用传递是Java的整体核心,如果你不懂引用传递,基本上所有的代码都无法进行正常的分析。 一.通过题目来进行分析 ...
    河神_6961阅读 194评论 0 0
  • 大概是昨天穿少了,我觉得自己有点发烧,脑子晕乎乎的,发烧的时候很多事情就瞒不住了。我很想他。可是不能说话,不能犯J...
    六娃77阅读 367评论 0 0
  • 天堂的生活很美妙,我深有感受。 但是在某些地方,仍然让我感到很不愉快。 最显而易见的,当然...
    巡灵初镜阅读 307评论 0 1
  • 文章点评 文章通过续写青蛙王子的故事,告诉自己的女儿在长大以后要小心男人的甜言蜜语。文章的文字流畅,情节设置的...
    上善若水在路上阅读 228评论 0 0
  • 看了第十五章一点点,隔了一个月没看,前面几乎都忘光了。但是还是决定继续之前的进度看。还是被作者丰富的知识所打动呀,...
    冰洛洛阅读 179评论 0 0