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");
        }
    }
  • 相关阅读:
    自定义注解!绝对是程序员装逼的利器!!
    我女儿说要看雪,但是我家在南方,于是我默默的拿起了键盘,下雪咯。
    零基础转行前端,如何拿下了字节跳动、美团等大厂offer
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    web面试必问的题
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    520了,用32做个简单的小程序
    虚拟机找不到本机vmnet0,vmnet8,无法连接xshell,解决方案
    Linux用户登出之后保持后台进程(nohup)
    Debian取消从光盘安装软件的方式(please insert the disc labeled)
  • 原文地址:https://www.cnblogs.com/hu1056043921/p/7275359.html
Copyright © 2011-2022 走看看