引用传递在java中有重要作用这里 讲解三个范例:
范例一:
class Demo{
int temp=30;//此处为了方便,不封装
};
public class Test{
public static void main(String args[]){
Demo d1=new Demo();//实例化Demo对象,实例化之后temp=30
d1.temp= 50 ;//修改temp属性的内容
System.out.println("fun()方法调用之前:"+d1.temp);
fun(d1);
System.out.println("fun()方法调用之后:"+d1.temp);
}
public static void fun(Demo d2){//此处的方法由主方法直接调用
d2.temp = 1000;//修改temp值
}
}
内存分析图:
范例二:
public class Test{
public static void main(String args[]){
String str1= "hello" ;
System.out.println("fun()方法调用之前: "+str1);
fun(str1);
System.out.println("fun()方法调用之后: "+str1);
}
public static void fun(String str2){//此处的方法由主方法直接调用
str2="world";//修改字符串内容
}
}
内存分析图:
范例三:
class Demo{
String temp= "hello" ;
};
public class Test{
public static void main(String args[]){
Demo d1=new Demo();//实例化Demo对象,实例化后temp="hello"
d1.temp="world";//修改temp属性内容
System.out.println("fun()方法调用之前: "+d1.temp);
fun(d1);
System.out.println("fun()方法调用之后: "+d1.temp);
}
public static void fun(Demo d2){//此处方法由主方法直接调用
d2.temp="!!!";//修改temp值
}
}
内存分析图:
范例一与范例三的流程是完全一样的,第二个范例比较特殊,因为String类是一个特殊的类,其内容是不可改变的。