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完全暴漏出来了,外部可以随意修改其内部数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值