java中参数传递有两种传递方式即值传递(传值)和引用传递(传址)他们有以下几点不同
1:变量存储机制不同
简单类型变量(值类型)是直接在栈内存中开辟存储空间存储变量值。
引用类型变量是由引用空间和存储空间两部分构成的,引用空间在栈中,存储空间在堆中,存储空间负责存储变量值,
引用空间负责存放存储空间的首地址。
2:变量传递
当变量与变量之间赋值时,引用类型变量和简单类型变量都属于值传递,不同的是简单变量传递的是内容本身
而引用变量传递的是引用地址。
例如:简单变量传值
int i=9;//定义简单变量i
int j=i;//将i变量值赋给j
int j=i+1;//将j加1
System.out.println(i);
System.out.println(j);
分析:i和j属于值类型变量,因此在赋值时,将i的值复制一份给j,复制完后i和j没有任何关系,无论修改那个值都不会影响对方
很明显输出肯定是:9 10
引用类型址传递
先定义一个类:Person
Person p=new Person();//定义引用变量p
p.setName("张三");
p.setAge(18);
//将p变量的地址赋给q
Pesron q=p;
//修改q变量的内容
p.setName("玩玩");
p.setAge(31);
System.out.println(p.getName()+p.getAge());
System.out.println(q.getName()+q.getAge());
/*
这里set和get方法我就不写了
分析:p和q都属于引用类型变量,因此在赋值时,将p的引用地址复制一份给q,所以p和q指向同一地址,因此无论修改那个都会相互影响。
所以输出应该是
玩玩 31
玩玩 31
*/
希望对你有帮助 |