在 Java 里,怎么复制一个对象?

(Java面试题)

其实,Java里一般没有必要复制对象。一般都是多个引用,指向同一个对象。注意不要套用C/C++的思想

比如,

Rectangle  a = new Rectangle ( 0, 0, 100, 40);

Rectangle  b = a;

这里并没有复制对象,b和a指向的是同一个对象。那么,如果想根据a 复制一个新的对象,该怎么做呢?

(注: 这里的 Rectangle 在来自 Java Swing 里的 Rectangle 类)

Rectangle  a = new Rectangle ( 0, 0, 100, 40);

Rectangle  b = new Rectangle();

b.x = a.x;

b.y = a.y;

b.width = a.width;

b.height = a.height;

以上代码,创建了两个 Rectangle 对象,它们的值完全相同。可以认为,基于a对象复制出一个新的对象b。

再来看一下,其实还有更简洁的写法:

Rectangle  a = new Rectangle ( 0, 0, 100, 40);

Rectangle  b = new Rectangle( a ); // 此处即复制出一个对象

为什么可以这么写? 因为在 java swing 里的 Rectangle类,还有一个构造方法:

public  class Rectangle

{

    public Rectangle (Rectangle other )

    {

        this.x = other.x;

        this.y = other.y;

        this.width = other.width;

        this.height = other.height;

    }

    ...

}

所以,在 b = new Rectangle ( a ) 时,即执行的是这个构造方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿发你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值