Java类中返回引用对象之后导致类中数据被修改的情况
2021/12/24 22:07:25
本文主要是介绍Java类中返回引用对象之后导致类中数据被修改的情况,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
package Learning; import java.util.Date; public class ClassDemo { private String sss; private Date d; public ClassDemo(String sss) { this.sss = sss; } public String getSss() { return sss; } public ClassDemo(String sss, Date d) { this.sss = sss; this.d = d; } public Date getD() { return d; } public static void main(String[] args) { ClassDemo c=new ClassDemo("asd",new Date()); System.out.println(c.d); Date s=c.getD(); s.setTime(1212123123); System.out.println(c.d); } }
根据上图可以发现对象中的数据被修改了,但是代码中并没有修改器方法,只有访问器方法,那么问题出在了哪里?
由于getD返回的方法是一个引用可变对象,这导致了类外部的一个Date类也拥有了管理类内部数据的渠道,也就是这个外部的Date类指向了类内部的成员,而这时对内外部的数据进行修改也会同时修改类内部的数据,因此请不要编写返回引用可变对象的访问器方法。
当然,如果一定要返回一个可变对象的引用,那么应该先对它进行克隆,对象clone是指存放在另一个位置上的对象副本。
修改后的getD代码如下:
public Date getD() { return (Date)d.clone(); }
可以发现修改外部Date对象并没有导致类内对象的数据被修改。
这篇关于Java类中返回引用对象之后导致类中数据被修改的情况的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南