Java教程

Java类中返回引用对象之后导致类中数据被修改的情况

本文主要是介绍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类中返回引用对象之后导致类中数据被修改的情况的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!