方法参数传递方式:值传递、引用传递
具体用法使用情况:
1、一个方法不能修改一个基本数据类型的参数(数值型或布尔型)
private void change(int x){
x = x*3;
}
public static void main(String[] args) {
ParamTest test = new ParamTest();
int data = 10;
test.change(data);
System.out.println(".."+data);
}
结果为:
..10
原理:主方法中的data跟changde()方法中的x分别存在不同的栈里边,因此改变x不会改变data
2、一个方法可以修改一个对象参数的状态
private static class Entity{
String userName;
String password;
@Override
public String toString() {
return "entity [userName=" + userName + ", password=" + password + "]";
}
}
private void changeElement(Entity entity2){
entity2.userName = "hrx";
}
public static void main(String[] args) {
ParamTest test = new ParamTest();
Entity entity1 = new Entity();
entity1.userName = "abc";
test.changeElement(entity1);
System.out.println(".."+entity1.userName);
}
结果为:
..hrx
原理:entity1、entity2都指向Entity,entity修改userName只能通过修改Entity的值去修改其存在堆里的值,因此通过同一个对象Entity进而修改了entity1
3、一个方法不能让对象参数引用一个新的对象
private static class Entity{
String userName;
String password;
@Override
public String toString() {
return "entity [userName=" + userName + ", password=" + password + "]";
}
}
private void exchangeEntity(Entity x){
Entity entity2 = new Entity();
entity2.userName = "def";
x = entity2;
}
public static void main(String[] args) {
Entity entity1 = new Entity();
entity1.userName = "abc";
test.exchangeEntity(entity1);
System.out.println(entity1.userName);
}
结果:
abc
原理: