Findbugs中的BUG:May expose internal representation by returning reference to mutable object

本文探讨了在Java中直接通过Date对象修改时间属性会影响到其他引用该Date对象的情况,并提出了解决方案,即使用Calendar类进行时间操作,以避免属性值的意外改变。测试结果显示,使用Calendar类能确保时间值的独立性。
摘要由CSDN通过智能技术生成

一个简单的类A:

@Data
public class A {
    private Date time;
}

现在为类A中的time属性赋值,测试代码如下:

public static void main(String[] args) {
        A a = new A();
        Date date = new Date();
        a.setTime(date);
        System.out.println(a.getTime());
        date.setTime(6);
        System.out.println(a.getTime());
    }

测试结果:
在这里插入图片描述
可以发现一旦data变量被修改后,就会影响到原来赋给变量A的time属性值。这明显是有问题的。

解决方法

修改下取时间的方式,如下:

 public static void main(String[] args) {
        A a = new A();
        Calendar date = Calendar.getInstance();
        a.setTime(date.getTime());
        System.out.println(a.getTime());
        date.set(Calendar.YEAR, 6);
        System.out.println(date.getTime());
        System.out.println(a.getTime());
    }

测试结果:
在这里插入图片描述
可以发现此时即使data变量被修改,也不会影响到原来赋给变量A的time属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值