Java中只存在值传递,不存在引用传递
1. 如果形参是基本数据类型,那么形参拷贝的是实参变量的值
2. 如果形参是引用数据类型,那么形参拷贝的是实参变量的地址。二者本质都是值
- 如果形参是 String 类型,像下面这种情况,由于 String 的不可变性,实参 str 始终都是“tarena”这个值
public class Example{
String str=new String("tarena");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
//引用类型变量,传递的是地址,属于引用传递。
str="test ok";
ch[0]='g';
}
}
- 形参是引用数据类型,而在该方法中两个引用发生了交换。那么是不会影响实参的,因为形参只是实参地址值的一个拷贝,不会影响实参
public class Person {
private String name;
// 省略构造函数、Getter&Setter方法
}
public static void main(String[] args) {
Person xiaoZhang = new Person("小张");
Person xiaoLi = new Person("小李");
swap(xiaoZhang, xiaoLi);
System.out.println("xiaoZhang:" + xiaoZhang.getName());
System.out.println("xiaoLi:" + xiaoLi.getName());
}
public static void swap(Person person1, Person person2) {
Person temp = person1;
person1 = person2;
person2 = temp;
System.out.println("person1:" + person1.getName());
System.out.println("person2:" + person2.getName());
}