参数传递(值传递与引用传递)
按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。
1、对象是按引用传递的
2、Java 应用程序有且仅有的一种参数传递机制,即按值传递(引用传值传递的是原始值的内存地址,其实也是一种按值传递)
3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本
1 public class ParamterE2 { 2 3 public static class ParamterE3{ 4 public String name="xiaotiaosi"; 5 } 6 7 public static void run(ParamterE3 paramterE3,String a,int b){ 8 ParamterE3 paramterE=paramterE3; 9 paramterE.name="xiaohua111"; 10 a="girl"; 11 b=1; 12 } 13 14 public static void main(String[] args) { 15 ParamterE2 paramterE2=new ParamterE2(); 16 ParamterE3 paramterE3=new ParamterE3(); 17 String a="boy"; 18 int b=0; 19 paramterE2.run(paramterE3,a,b); 20 System.out.println(paramterE3.name+" "+a+" "+b); 21 } 22 }
程序运行的结果为:xiaohua111 boy 0
原始对象内的成员变量name的值改变,原始String类型的变量a 和原始int类型的变量b值没有发生改变。
说明:
1.对象就是传引用
2.原始类型就是传值(boolean 、char、byte、short、int、long、float、double)
3.String类型因为没有提供自身修改的函数,每次操作都是新生成一个String对象,所以要特殊对待。可以认为是传值。
注:通过查资料发现String类型比较特殊,在Java中,String是一个引用类型,但是在作为参数传递的时候表现出来的却是基本类型的特性。
查过相关资料后我觉得是两个原因导致的,一个是String实际上操作的是char[],可以理解为String是char[]的包装类。二是给String变量重新赋值后,实际上没有改变这个变量的值,而是重新new了一个String对象,改变了新对象的值,所以原来的String变量的值并没有改变。