Java值传递与引用传递
值传递(call by value),指的是在Java中,如果向方法中传递的是int double等基本类型,那么传递到方法中的只是一个拷贝副本(形参),那么无论如何操作
这个形参,都不会对实参产生影响.
public class ExceptionClass { public static void main(String[] args) throws FileNotFoundException { int a=1,b=2; changeVal(a,b); //运行结果:a=1---b=2 System.out.println("a="+a+"---b="+b); } private static void changeVal(int a, int b) { int temp = a; a = b; b = temp; } }
引用传递(call by reference)
什么叫call by reference(引用传递),当往方法传递类对象时,会拷贝一个副本(形参)到方法里,这里的形参跟实参对象是同一地址。这里要注意,如果用形参内部方法修改形参内容,实参会一起改变。除此之外,形参怎么改变,实参都不会受到影响.比如:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class ExceptionClass { public static void main(String[] args) throws FileNotFoundException { Student s = new Student("1", "zhangsan", 10); changeObj(s); //运行结果:Student [sid=1, sname=zhangsan, age=10] System.out.println(s.toString()); } public static void changeObj(Student s){ Student s2 = new Student("2", "lisi", 12); s = s2; } }
因为传递到方法中的只是实参的引用地址的拷贝副本,而副本指向了一个新的student对象,但是实参的指向并没有改变,所以,打印实参的结果没变.
只有当形参中调用内部方法改变了值,才会更改实参中的内容
public class ExceptionClass { public static void main(String[] args) throws FileNotFoundException { Student s = new Student("1", "zhangsan", 10); changeObj(s); //运行结果:Student [sid=1, sname=zhangsan, age=25] System.out.println(s.toString()); } public static void changeObj(Student s){ s.setAge(25); } }

浙公网安备 33010602011771号