zoukankan      html  css  js  c++  java
  • java中的引用传递问题

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

    第一个引用传递案例:

    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");
        }
    }
  • 相关阅读:
    hdoj 1175 (bfs)
    hdoj1072 Nightmare bfs
    hdoj1242(bfs+priority_queue)
    hdoj1242(dfs 剪枝 解法)
    hdoj1421(bfs)
    配置Windows 2008 R2 64位 Odoo 8.0 源码PyCharm开发调试环境
    [转]编译VC++程序warning C4819快速解决
    解决VS2013+IE11调试DevExpress ASP.NET MVC的性能问题
    Google被墙 Android开发工具下载地址
    Mac OS X Yosemite安装盘U盘制作
  • 原文地址:https://www.cnblogs.com/hu1056043921/p/7275359.html
Copyright © 2011-2022 走看看