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");
        }
    }
  • 相关阅读:
    设计模式-状态模式
    Nginx相关
    Docker基础使用
    JavaScript定时器及回调用法
    前端交互篇
    基于ConcurrentHashMap的本地缓存
    J.U.C体系进阶(五):juc-collections 集合框架
    J.U.C体系进阶(四):juc-sync 同步器框架
    J.U.C体系进阶(三)- juc-atomic 原子类框架
    .net core https 双向验证
  • 原文地址:https://www.cnblogs.com/hu1056043921/p/7275359.html
Copyright © 2011-2022 走看看