2009年最后一博:关于 Java 中对象的复制
2009年最后一博:关于 Java 中对象的复制
Java 中的赋值操作符与 C++ 中的不一样。在 C++ 中,这条语句:bc2 = bc1;将一个名为 bc1 的对象的所有数据都拷贝到名为 bc2 的对象中。也就是说这条语句执行后,程序中有两个含有相同数据的对象。然而在 Java 中,这条相同的赋值语句只向 bc2 中拷贝了 bc1 指向的存储地址,现在 bc1 和 bc2 实际上指的是同一个对象,它们都是这个对象的引用。这样大大提高了内存使用效率,同时也容易让一些对内存了解不深的朋友带来一些使用上的错误。比如 bc1.add(25);buc2.add(20);执行之后 bc1 增加了 45。而作者本意可能是只是让 bc1 增加 25,bc2 增加 20 而已。这说明了,在 Java 中,bc2 = bc1; 并不是真正意义上的复制。那么在 Java 中如何进行对象复制呢?作者结合 Java 数据结构相关知识,总结了一些项目中的经验,希望可以和大家共同探讨一下这个问题。
没有使用对象复制的代码:
银行帐户源代码 BankAccount.java:
package clone;
public class BankAccount{
private double balance;
public BankAccount(double ini){
this.balance = ini;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public void add(double give){
this.balance += give;
}
public void redu(double give){
this.balance -= give;
}
}
程序入口 TestClone.java:
package clone;
public class TestClone {
public static void main(String[] args) {
BankAccount bc1 = new BankAccount(1000.0);
BankAccount bc2 = bc1;
bc1.add(25);
bc2.add(20);
System.out.println("用户 1 的帐户余额为:" + bc1.getBalance());
System.out.println("用户 2 的帐户余额为:" + bc2.getBalance());
}
}
执行 TestClone.java,打印结果如下:
用户 1 的帐户余额为:1045.0
用户 2 的帐户余额为:1045.0
这下用户 2 要哭了:自己辛辛苦苦攒的一点钱都存别人帐户里边去了。怎么解决这个
相关文档:
本文来自:http://blog.csdn.net/ruyanhai/archive/2007/11/07/1871663.aspx
◆ 一般情况下,我们都使用相对路径来获取资源,这样的灵活性比较大.
比如当前类为com/bbebfe/Test.class
而图像资源比如sample.gif应该放置在com/bbebfe/sample.gif
而如果这些图像资源放置在icons目录下,则应该是com/bbebfe/icons/sample.gif ......
得安奇专卖(运动休闲鞋,板鞋)淘宝小店:www.bxbshoes.com
Java 定义的位运算(bitwise operators )直接对整数类型的位进行操作,这些整数类型包括long,int,short,char,and byte 。表4-2 列出了位运算:
表4.2 位运算符及其结果
运算符 结果 &nb ......
声音可以创造意境,触发遐想,当与虚拟图像相结合时,更加可以让整个世界布满幻觉。声音是多媒体技术的基础。这就是Sun公司的Java媒体技术开发小组忙于预备Java Sound 1.0 API并将其包含于下一版本的JAVA开发工具库中的原因。
在JAVA2平台出现之前,JAVA语言只能处理电话音质的声音,以单声道8KHZ的采样频率存储为&mu ......
......