数据类型传值:
public class Demo {
public static void main(String[] args) {
int i=10;
int l=i;
i++;
System.out.println(l);//10
System.out.println(i);//11
分析:
Int i=10;
i存放的是数据10,因为基本数据类型开辟空间存放在栈中
int L=i;
L存放的是数据10的地址,L指向i存储数据的地址
i++
L指向i的地址,i的值发生改变,系统会在变量L所在的内存空间开辟一个位置来存放i的没有改变之前的值。
}
引用数据类型传的参数的地址,引用参数存在堆上面,地址在栈中,引用类的数据传递是存储他的地址。
因为emp它的地址是指向那个传进来的对象,所以你做的改动是指向传进来的那个对象的地址。之后的emp=new Emp();使其指向了另一个堆空间,将emp与原来的那个传进来的对象的地址断开了。所以之后所做的任何操作都和之前的无关(100 50 50)
class Emp {
public int age;
}
publ ic class Test {
public static void change(Emp emp)
{
emp.age = 50;
emp = new Emp();//再创建一个对象
emp.age=100;
}
public static void main(String[] args) {
Emp emp = new Emp();
emp.age = 100;
System.out.println(emp.age);
change(emp);
System.out.println(emp.age);
System.out.println(emp.age);
}
}
总结:
基本数据类型传值,对形参的修改不会影响实参。
String,Integer,double 可以理解为传值,最后不会修改实参对象
引用类型传引用,形参实参指向同一个内存地址(同一个对象),对参数的修改会影响到实际对象。