基本数据类型
当传递方法参数类型为基本数据类型(数字以及布尔值)时,一个方法是不可能修改一个基本数据类型的参数。
class Basic {
public void change(int a) {
a=a*3;
}
}
public class Test1 {
public static void main(String[] args) {
int a=10;
Basic basic = new Basic();
System.out.println(a);
basic.change(a);
System.out.println("----------"+a);
}
}
程序结果:
引用数据类型
当传递方法参数类型为引用数据类型时,一个方法将修改一个引用数据类型的参数所指向对象的值。
public class Studet {
String name;
int age;
public String getName() {
return name;
}
@Override
public String toString() {
return "Studet [name=" + name + ", age=" + age + "]";
}
}
public class Test2 {
public static void change(Studet stu) {
stu.name="李四";
stu.age=18;
}
public static void main(String[] args) {
Studet studet = new Studet();
studet.name="张三";
studet.age=20;
System.out.println(studet.toString());
change(studet);
System.out.println(studet.toString());
}
}
结果
//Studet类同上
public class Test2 {
public static void swap(Studet s1,Studet s2) {
Studet temp=s1;
s1=s2;
s2=temp;
}
public static void main(String[] args) {
Studet s1 = new Studet();
Studet s2 = new Studet();
s1.name="张三";
s1.age=20;
s2.name="李四";
s2.age=18;
System.out.println(s1.toString());
System.out.println(s2.toString());
swap(s1,s2);
System.out.println(s1.toString());
System.out.println(s2.toString());
}
}
结果:
总结
一个方法不能修改一个基本数据类型的参数(数值型和布尔型)。
一个方法可以修改一个引用所指向的对象状态,但这仍然是按值调用而非引用调用。
上面两种传递都进行了值拷贝的过程。
java中只有按值传递,不能按引用传递。