首页 > 编程语言 > 详细

java 访问器方法中对象引用的问题

时间:2016-01-06 17:27:28      阅读:247      评论:0      收藏:0      [点我收藏+]

"注意不要编写返回引用可变对象的访问器方法".因为会破坏类的封装性,引用的内容可能会被改变,产生业务逻辑上的错误.

什么是可变对象?

先要搞清楚java中值传递和引用传递的问题,总结如下:

1.对象就是传引用

2.原始类型就是传值

3.String,Integer, Double等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。可以认为是传值。

Integer 和 String 一样。保存value的类变量是Final属性,无法被修改,只能被重新赋值/生成新的对象。 当Integer 做为方法参数传递进方法内时,对其的赋值都会导致 原Integer 的引用被 指向了方法内的栈地址,失去了对原类变量地址的指向。对赋值后的Integer对象做得任何操作,都不会影响原来对象。

所以,可变对象即immutable类型外的一般对象.[immutable类:如果类中的每个方法否不会改变其对象,这种类就是不可变的类.]

如果需要返回一个可变对象的引用,首先对它克隆,使用.clone,如"return hireDay.clone();",会生成另一个内存位置上的对象副本.

很多人对"java程序设计语言总是采用按值调用"这句话与引用传递产生误会,认为矛盾,其实不矛盾,引用传递时,方法调用的是对象的拷贝值,也是对类对象的引用,当方法调用结束时,拷贝值不再使用,方法执行过程中通过拷贝值修改的对象值被改变.

java 访问器方法中对象引用的问题

原文:http://www.cnblogs.com/runwulingsheng/p/5106084.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!