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");
        }
    }
  • 相关阅读:
    idea开发工具关于svn上代码的颜色
    写一个Request包装类ExternalApiHttpServletRequestWrapper(外部接口请求使用用于解密)
    什么情况下,需要用事务?
    SpringBoot 2.1.6.RELEASE ->SpringCloudAlibaba
    oracle查看锁表进程,杀掉锁表进程
    JavaScript 闭包
    萤石云定时更新 accessToken
    Ubuntu Linux的DevExpressReport无法显示报表(.net core)
    Vue在IE下打开空白解决方案
    DFT scan chain 介绍
  • 原文地址:https://www.cnblogs.com/hu1056043921/p/7275359.html
Copyright © 2011-2022 走看看