java中的引用传递问题

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

第一个引用传递案例:spa

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类的匿名对象会独自占用一块堆内存,不须要对象3d

第二道引用传递案例code

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的匿名对象有独立的堆内存空间,此外字符串一旦声明则不能够被改变,若想改变只有改变其对象地址,内存分析:对象

第三个引用传递案例blog

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类的匿名对象会独自占用一块堆内存,不须要对象get

第二道引用传递案例class

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");
    }
}
相关文章
相关标签/搜索