黑马程序员技术交流社区
标题:
值传递与引用传递的区别
[打印本页]
作者:
瓶中人
时间:
2013-11-4 14:42
标题:
值传递与引用传递的区别
Java根据变量的类型不同可分为简单类型和引用类型变量,这两种类型的变量主要有以下不同。
1) 存储机制
简单类型变量是直接在栈内存中开辟存储空间存储变量值。
引用类型变量是由引用空间和存储空间两部分构成,引用空间在栈内存中,存储空间在堆内存,存储空间负责存储变量值,引用空间负责存放存储空间的首地址。引用变量中存放的是地址值,通过地址值可以定义存储位置并修改存储信息。
简单类型和引用类型变量存储机制如下图所示:
2.变量传递
当变量与变量之间赋值时,引用类型变量和简单变量都属于值传递,不同的是简单变量传递的是内容本身,而引用变量传递的是引用地址,具体示例如下
简单变量赋值
public class Demo
{
public static void main(String[] args)
{
int i = 8 ; //简单变量j
int j = i; //将i变量值赋给j
j = j + 1 ; //j + 1
System.out.println(i);
System.out.println(j);
}
}
在上述代码中,i和j是属于简单类型变量,因此在赋值时,将i的值复制给了j,完毕后i和j并没有任何关系,修改j的值影响i。
引用变量赋值
public class Demo
{
public static void main(String[] args)
{
//定义引用变量
Person p = new Person();
p.name = "张三";
p.age = 18;
Person p2 = p; //将变量p的地址赋给p2
p2.name = "李四";
p2.age = 19;
//输出两者的信息
System.out.println(p.name + " " + p.age);
System.out.println(p2.name + " " + p2.age);
}
}
//定义一个类
class Person
{
String name;
int age;
}
P和p2属于引用类型变量,因此在赋值时,将p的引用地址复制给p2,所以两者有着相同的地址,这是说当p2修改信息时,P也会受到影响
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2