IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API

问题描述

IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API。来吧,大家发表意见,全分奉上。 问题补充:没人知道吗,能不能告诉我啊

解决方案

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;/** * 深/浅克隆 * * @author JohnGao */public class CloneTest{/** * 模拟对象深/浅克隆效果 * * @author JohnGao * * @param T: 目标克隆对象 * * @throws Exception * * @return T: 克隆对象 */public static <T> T clone(T t) throws Exception {/* 实例化字节数组节点流 */ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);/* 将目标克隆对象转换成数组 */objectOutputStream.writeObject(t);/* 返回克隆对象 */return (T) new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())).readObject();}}public int age;public StringBuffer str = new StringBuffer();@Testpublic void test() throws Exception{MyTest myTest1 = new MyTest();MyTest myTest2 = CloneTest.clone(myTest1);System.out.println("myTest1.hashcode: " + System.identityHashCode(myTest1));System.out.println("myTest2.hashcode: " + System.identityHashCode(myTest2));myTest2.age = 15;System.out.println("myTest1.age: " + myTest1.age);System.out.println("myTest2.age: " + myTest2.age);myTest1.str.append("++++");myTest2.str.append("----");System.out.println("myTest1.str: " + myTest1.str);System.out.println("myTest2.str: " + myTest2.str);}
解决方案二:
LZ采纳的方案是有明显局限的:被克隆的对象必须实现Serializable接口。应付面试可能可以,但并不完美,更加完整的解决方案是自己写程序序列化对象。可以参考Hessian序列化过程。也可以参考各种Json框架,道理是一样的。
解决方案三:
浅克隆public Object clone(){ return super.clone();}深克隆public Object clone(){ Employee cloned = (Employee)super.clone(); cloned.dep = (Department)this.dep.clone(); //等等子对象 return cloned;}流复制(需序列化)public Object deepClone(){ ByteArrayOutoutStream bo=new ByteArrayOutputStream(); ObjectOutputStream oo=new ObjectOutputStream(bo); oo.writeObject(this); ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi=new ObjectInputStream(bi); return(oi.readObject());}
解决方案四:
你看下API的实现就明白了,原理就是通过字节码进行拷贝,说到底还是JAVA传参的影响,传递的实际是对象(非基本类型)的句柄。说不能用API,没说不能和API实现的原理一样啊

时间: 2024-09-04 23:55:59

IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API的相关文章

如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码

问题描述 如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码 请问如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码 解决方案 http://etwo.iteye.com/blog/1460375

大神进---如何用Java写一个监控的.bat文件,写这个程序的目的是用来监控JasFtp用的。

问题描述 我们公司今天让让我写一个监控程序,要用到java,我们部门用到最多的就是JasFtp来传文件,但是这个程序经常卡死,但是又不会报错,所以让我来写一个他的监控程序,用来监控Log日志就可以了,但是关键的是,我现在还不知道该如何写在各个监控程序,所以来这里问问大神们,给我点代码我参考参考 解决方案 解决方案二:自己顶一下,·····解决方案三:.bat读取log日志做你的业务逻辑处理.解决方案四:没有人么?为什么没有人来关注一下呢解决方案五:你要什么日志呢,若是bat的执行日志text.b

VMware 2013年增长13% 中国研发中心换帅

[天极网服务器频道2月20日消息]近日VMware公司公布了2013年第四季度及全年的财务报告.财报显示,VMware公司2013年全年收入增长13%,创下52.1亿美元的历史新高;2013年第四季度收入年增15%,达到14.8亿的新记录.同时,VMware公司还宣布任命任道远为VMware中国研发中心总经理. 2013年第四季度财务报告: 第四季度收入为14.8亿美元,比2012年第四季度增长15%.扣除属于Pivotal Software, Inc.的收入及2013年间发生的所有资产剥离,第

解码丰田中国研发中心 在华普及新能源技术

丰田中国研发中心区别于其他跨国车企在华研发中心的是,它将力推以混合动力为主的新能源动力系统,丰田在这方面已经有一套清晰的战略了,剩下的就是如何执行. 从江苏常熟市中心往东南方向驱车20分钟,即可抵达常熟东南经济开发区.这个2003年才获得江苏省政府批复成立的省级开发区,因其距离上海不到100公里,吸引了丰田汽车的入驻. 投资达6.89亿美元.由丰田汽车独资拥有的机构--丰田汽车研发中心(中国)有限公司(以下简称TMEC),从2003年开始就已经开始构思了.8年之后,TMEC正式开始动工建设,并将

加速新能源车开发丰田中国研发中心奠基

丰田在新能源领域的绿色"梦想",正在加速"照进" 中国市场. 2011年10月22日,丰田社长丰田章男宣布,总投资约6.89亿美元的常熟研发中心正式开工.该研发中心建成后,将成为丰田全球最大的研发中心.与丰田在中国合资企业的研发中心相比,丰田常熟研发中心侧重于新能源,以及发动机.底盘等核心技术研发.当天,丰田社长丰田章男更是用中文说出了丰田的决心:"中国最重要". 由此不难想象,中国市场在丰田全球发展愿景中所处的重要地位再次被明确.此次在华开建全

如何用word写一个中文邮件?

  如何用word写一个中文邮件? 1.打开word. 2.点击邮件界面. 3.点击收件人,如果你没有注册过,那么请略过这一步. 4.点击左上角的中文信封. 5.然后,如果有提示的话,你可以观看信封制作向导,如果没有的话,也请略过这一面. 6.展示过后,会自动创建一个新的word文档,名为:"未命名-2". 7.填写信封界面. 8.返回初建立文档,填写文章内容,然后点击发送. 注意事项 因word本身问题,可能会有发送不成功的情况,或操作步骤不同的情况.

java-请问如何用AsyncClient写一个能访问并登录网站的程序?

问题描述 请问如何用AsyncClient写一个能访问并登录网站的程序? 请问如何用AsyncClient写一个能访问并登录网站的程序?不是android-async-http AsyncHttpClient. 能够根据地址,还有用户名和密码就能登录网站.初学网络程序设计,所以希望代码简洁些.请大家帮帮忙,谢谢.

类别-如何用swift写tts程序

问题描述 如何用swift写tts程序 AVSpeechSynthesizer *tts1;AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@""i love you""];//设置语言类别(不能被识别,返回值为nil)AVSpeechSynthesisVoice *voiceType = [AVSpeechSynthesisVoice voiceWithLang

新手 请求帮忙解答-请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵)``````

问题描述 请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵)`````` 请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵).把每列的数据合成一大列输出,意思就是把第二列的数据放在第一列的末尾,第三列放在第二列的末尾````` 多谢了. 解决方案 太麻烦 说下思路,你看一下行不行, 1>.把每一行都放到一个数组里 ,可以用缓冲流读取一行, 2>.然后按矩阵的分割部分的字符 来分割这一行的字符串 拿到每个数组项, 3>.根据每个数组的下标,可以拿到