数组元素为引用类型

来源:百度知道 编辑:UC知道 时间:2024/05/26 05:35:02
public class Test
{
public static void main(String[] args)
{
StringBuffer buffer = new StringBuffer("a");

StringBuffer[] buffers = new StringBuffer[]{buffer, null};
System.out.println(buffers[0]);

buffer.append("b");
System.out.println(buffer);
System.out.println(buffers[0]);

buffer = null; //这一步什么意思,讲的西一点
System.out.println(buffer);
System.out.println(buffers[0]);

buffers[0].append("c");
System.out.println(buffers[0]);

buffers[0] = null;
buffers = null;
}
}
解释一下引用,概念有点模糊,谢谢!!

引用就是给一个变量赋上值时,这个变量指向的不是这个值本身,而是这个存放这个值的地址,除了那几个基本类型外,java中的对象都是通过引用赋值.
你这个代码是这样的,首先给buffer赋值a,假设a存放的地址是001,那么buffer指向了001;然后给buffers赋值,buffers第一个元素指向了buffer,也就是001地址,第二个元素为null,没有分配空间. System.out.println(buffers[0])输出001的值,为a;buffer.append("b"),buffer变为ab,即001存放的值也变成了ab,所以 System.out.println(buffer);System.out.println(buffers[0]); 都输出ab.
buffer = null,也就是buffer指向了另外一个地址,但是这个地址并没有给其分配空间,为空,这时001地址里面的值还是不变的,为ab.所以System.out.println(buffer);输出了null;由于buffers[0]指向的是001地址,值还是ab,所以System.out.println(buffers[0]); 输出还是ab;buffers[0].append("c"),现在001存的是abc,输出buffers[0]就为abc.buffers[0] = null, buffers = null,把这来那个变量都指向了空地址.

引用表示存储的是内存中的一个地址,指向对象
如果对引用赋值,也就是将引用指向了一个新的对象

程序中
buffer一开始指向对象new StringBuffer("a");
执行完 buffer = null后,buffer指向空的指针
明白了吗?

简单来说,java中的引用接近c/c++中的指针,只是这个指针是不可变的。