java中的引用和溢出

在之前写过的文章《编程语言中形形色色的“指针”》,曾经写过关于java引用问题。总结一下,就是java中往函数传参时,如果参数是对象类型(比如说数组,或者最终继承自Object的对象,有别于int,byte,long这些简单类型)是采用引用的方式,在函数内部改变了对象的属性,函数调用完成后,这些改变依然保留。

下面讲一下溢出问题,当然这里的“溢出”不是指C语言的内存溢出,而是指变量的可修改区域超出了原本预想的情况。比如下面这段代码:

public class RefTest {
	public static final int DATA_LEN = 10;
	private final byte[] data = new byte[DATA_LEN];	
	
	public RefTest() {
		
	}
	
	public byte[] getData() {
		return data;
	}
	
	public static void main(String[] argv) {
		RefTest test = new RefTest();
		byte[] data = test.getData();
		System.out.println(data[0]);
		data[0] = 10;
		byte[] data2 = test.getData();
		System.out.println(data2[0]);
	}
}

代码片段1

最后一句System.out.println(data2[0]);会打印什么呢?会是0吗?恭喜你,答错了,应该10。不要以为你没有给一个private属性提供类似setter的方法,在外部就不能修改了。上面代码中的getData函数,其实将属性data完全暴漏出来了,外部可以随意修改其内部数据。

猜你喜欢

转载自blog.csdn.net/yunnysunny/article/details/8518429