1、按值传递:指在方法的调用时,传递是按值得拷贝传递的,按值传递的重要特点传递的是值得拷贝,本身不变化。
public class Test3 { public static void main(String[] args) { Test3 test3=new Test3(); int a=1; test3.changeValue(a); System.out.println("a调用方法之后的值:"+a); } private void changeValue(int a){ a=5; System.out.println("a在changeValue方法中值:"+a); } }
打印结果:
a在changeValue方法中值:5
a调用方法之后的值:1
2、按引用传递,指的是在方法的调用时,传递的参数是按引用的进行传递,其实传递的是引用的地址,也就是变量对应的内存空间地址。
public class Test3 { public static void main(String[] args) { Test3 test3=new Test3(); Student student=new Student(); student.name="李四"; test3.changeValue(student); System.out.println("student调用方法之后的值:"+student.name); } private void changeValue(Student student){ student.name="张三"; System.out.println("student在changeValue方法中值:"+student.name); } } class Student{ String name; }
打印结果:
student在changeValue方法中值:张三
student调用方法之后的值:张三
对上述例子的改变:按照引用传递的值互不影响,即在changeValue方法中的修改不影响到main方法里面,在方法changeValue中new一个实例就可以了。
public class Test3 { public static void main(String[] args) { Test3 test3=new Test3(); Student student=new Student(); student.name="李四"; test3.changeValue(student); System.out.println("student调用方法之后的值:"+student.name); } private void changeValue(Student student){ student=new Student();//新加的一行 student.name="张三"; System.out.println("student在changeValue方法中值:"+student.name); } } class Student{ String name; } 打印结果: student在changeValue方法中值:张三 student调用方法之后的值:李四 小结: (1)“java中参数的传递都是按值传递”意思是:按值传递是传递参数值的拷贝,按引用传递的其实传递的是引用的地址值。 (2)在java中只有基本类型和按下面这种方式定义的string是按值传递的,就是直接使用双引号定义的字符串方式: String name="rose";其他的都是按引用传递。