• 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");
        }
    }
  • 相关阅读:
    SDN第4次上机作业
    SDN第三次作业
    SDN第三次上机作业
    SDN第二次上机作业
    SND第二次作业
    【Beta Scrum】冲刺!4/5
    【Beta Scrum】冲刺! 3/5
    【Beta Scrum】冲刺! 2/5
    【Beta Scrum】冲刺! 1/5
    SDN第二次上机作业
  • 原文地址:https://www.cnblogs.com/hu1056043921/p/7275359.html
Copyright © 2020-2023  润新知