博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的引用传递问题
阅读量:5972 次
发布时间:2019-06-19

本文共 2719 字,大约阅读时间需要 9 分钟。

---恢复内容开始---

第一个引用传递案例:

class Message{    private int num;    public Message(int num){        this.num=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(10);        change(msg);//引用传递        System.out.println(msg.getNum());//输出100    }    public static void change(Message temp){        msg.setNum(100);    }}

对该代码进行内存分析,值类型不会独自占有一块堆内存,必须要有实例化对象,而String类的匿名对象会独自占用一块堆内存,不需要对象

第二道引用传递案例

public class Test{    public static void main(String args[]){            String msg = "hello";        change(msg);        System.out.println(msg);//输出hello    }    public static void change(String temp){        temp="word";    }}

String的匿名对象有独立的堆内存空间,此外字符串一旦声明则不可以被改变,若想改变只有改变其对象地址,内存分析:

第三个引用传递案例

class Message{    private String str;    public Message(String str){        this.str=str;    }    public void setStr(String str){        this.str=str;    }    public String getStr(){        return this.str;    }}public class Test{    public static void main(String args[]){            Message msg = new Message("hello");        change(msg);        System.out.println(msg.getStr());    //输出word    }    public static void change(Message temp){        temp.setStr("word");    }}

 

 

---恢复内容结束---

第一个引用传递案例:

class Message{    private int num;    public Message(int num){        this.num=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(10);        change(msg);//引用传递        System.out.println(msg.getNum());//输出100    }    public static void change(Message temp){        msg.setNum(100);    }}

对该代码进行内存分析,值类型不会独自占有一块堆内存,必须要有实例化对象,而String类的匿名对象会独自占用一块堆内存,不需要对象

第二道引用传递案例

public class Test{    public static void main(String args[]){            String msg = "hello";        change(msg);        System.out.println(msg);//输出hello    }    public static void change(String temp){        temp="word";    }}

String的匿名对象有独立的堆内存空间,此外字符串一旦声明则不可以被改变,若想改变只有改变其对象地址,内存分析:

第三个引用传递案例

class Message{    private String str;    public Message(String str){        this.str=str;    }    public void setStr(String str){        this.str=str;    }    public String getStr(){        return this.str;    }}public class Test{    public static void main(String args[]){            Message msg = new Message("hello");        change(msg);        System.out.println(msg.getStr());    //输出word    }    public static void change(Message temp){        temp.setStr("word");    }}

 

转载于:https://www.cnblogs.com/hu1056043921/p/7275359.html

你可能感兴趣的文章
第一次作业-准备篇
查看>>
HDU1848 Fibonacci again and again
查看>>
HTML思维导图
查看>>
git改密码出现授权问题
查看>>
ORA-02266: 表中的唯一/主键被启用的外键引用
查看>>
day-6 and day-7:面向对象
查看>>
CSU Double Shortest Paths 湖南省第十届省赛
查看>>
webgl像机世界
查看>>
php正则怎么使用(最全最细致)
查看>>
javascript数学运算符
查看>>
LC.155. Min Stack(非优化,两个stack 同步 + -)
查看>>
交互设计[3]--点石成金
查看>>
SCCM TP4部署Office2013
查看>>
SVN: bdb: BDB1538 Program version 5.3 doesn't match environment version 4.7
查看>>
jsp内置对象作业3-application用户注册
查看>>
redis主从配置<转>
查看>>
bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
查看>>
Web应用工作原理、动态网页技术
查看>>
EXCEL工作表保护密码破解 宏撤销保护图文教程
查看>>
Catalan数(卡特兰数)
查看>>