范例一

class Demo{  
    public int temp = 30;  
}  
public class T {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        Demo d1 = new Demo();  
        d1.temp = 50;  
        System.out.println("fun()方法调用之前:"+d1.temp);  
        fun(d1);  
        System.out.println("fun()方法调用之后:"+d1.temp);  
    }  
    public static void fun(Demo d2){  
        d2.temp = 1000;  
    }  
}

内存分析

License Badge

范例二

public class T {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        String str1 = "hello";  
        System.out.println("fun()方法调用之前:"+str1);  
        fun(str1);  
        System.out.println("fun()方法调用之前:"+str1);  
    }  
    public static void fun(String s2){  
        s2 = "MLDN";  
    }
}

内存分析

License Badge

范例三

class Demo{  
    String temp = "hello";  
}  
public class T {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        Demo d1 = new Demo();  
        d1.temp = "world";  
        System.out.println("fun()方法调用之前:"+d1.temp);  
        fun(d1);  
        System.out.println("fun()方法调用之后:"+d1.temp);  
    }  
    public static void fun(Demo d2){  
        d2.temp = "MLDN";  
    }  
}

内存分析

License Badge

本程序与范例一的流程完全是一样的,范例二是特殊的,因为String是一个特殊的类,其内容不可改变。