java的clone方法实现的是浅拷贝,如果被拷贝的object里面有子object,子object有孙object。。。的话,这些object的内容就消失了。
除非你对每个子/孙的object的clone方法都重载。当然这东西太2b,人类都不这么玩的。
最简单的实现方式是使用ByteArrayOutputStream和ByteArrayInputStream()来将一个object转换成byte流变换。先将它write到输出流,再重输入流read。实现它内容的拷贝。
package com.interview.scoop;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Stack;
public class DeepClone {
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
for(int i = 0; i < 3; i++) {
s.push(i);
}
@SuppressWarnings("unchecked")
Stack<Integer> b = (Stack<Integer>) DeepClone.copy(s);
int size = b.size();
for(int i = 0; i < size; i++) {
System.out.println(b.pop());
}
}
public static Object copy(Object oldObj) {
Object o = null;
//Used to carry the output
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
// Used to method output
ObjectOutputStream oos = new ObjectOutputStream(bos);
// Write object to the container
oos.writeObject(oldObj);
// flush is not necessities
oos.flush();
oos.close();
// container, give the object to it, which will be translate to stream
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
// tool
ObjectInputStream ois = new ObjectInputStream(bis);
try {
// read target and get an object
o = ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
return o;
}
}
}
分享到:
相关推荐
│ Java面试题63:怎么操作linux服务器.mp4 │ Java面试题64:有没有使用过云主机.mp4 │ Java面试题65:数据库优化方面的事情.mp4 │ Java面试题66:如果查询和定位慢查询.mp4 │ Java面试题67:数据库优化之数据库...
这个"JAVA面试常见题型全集"很可能是为了帮助应聘者准备面试而设计的资料集合。以下将根据标题和描述,结合Java语言的核心概念、面试常问问题及重要知识点进行深入阐述。 一、Java基础 1. Java语言特性:理解面向...
在 Object 基类中,有一个方法叫 clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分,若克隆对象中存在引用类型的属性深克隆会将此属性完全拷贝一份,而浅克隆仅仅...
Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括但不限于基础语法、...这些是Java面试中常见的主题,对于准备面试的开发者来说,熟练掌握这些知识点并能够灵活运用,将极大地提高面试成功的机会。
以下是一些Java面试中常见的问题及其解析: 1. **基础语法** - 什么是Java的三大特性?(封装、继承、多态) - Java中的访问修饰符有哪些?(public、private、protected、默认) - Java中的四种基本数据类型是...
在准备阿里面试的过程中,Java开发者...通过阅读“阿里Java面试要点+以往题目.doc”文档,你可以更具体地了解面试的侧重点,针对性地进行复习和准备。在实践中不断应用和巩固这些知识,将有助于你在面试中脱颖而出。
Java作为一门广泛使用的编程...以上内容是Java面试笔试中常见的重点知识,熟练掌握这些知识点对于Java程序员来说至关重要。在准备面试时,不仅要理解概念,还要通过实践加深理解,以便在面试中能够灵活应对各种问题。
Java 中的访问修饰符、运算符、垃圾回收机制、自动装箱和自动拆箱、类加载机制、异常层次结构、接口和抽象类、内部类、深拷贝和浅拷贝、String、StringBuilder 和 StringBuffer、集合框架、泛型、反射、注解、并发...
Java面试突击版1主要聚焦于Java基础知识、集合、多线程和JVM相关的面试知识点,同时也涉及面试准备、简历撰写技巧以及对大厂面试的关注点。以下是对这些内容的详细阐述: 1. **面向对象与面向过程的区别**: - ...
深拷贝和浅拷贝分别拷贝对象本身和引用。 16. **throw和throws**:throw用于抛出异常,而throws用于声明方法可能抛出的异常。 17. **final、finally、finalize的区别**:final修饰变量表示不可变,修饰类和方法...
Java是一种广泛使用的面向对象的编程语言,其面试题库涵盖...以上知识点只是Java面试中的一部分,完整的Java面试准备还需要涵盖更多主题,如多线程、集合框架、异常处理、IO流、设计模式、JVM内存模型、数据库操作等。
为了在面试中脱颖而出,了解并掌握常见的Java面试题至关重要。本篇文章汇总了200道Java面试题,涵盖了从基础到高级的各个层面,包括Java基础、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、设计...
Java是一种广泛使用的编程语言,尤其在企业级应用中占据重要地位。面试中,Java开发者常常会面临各种技术问题,从基础...以上只是Java面试中部分常见的问题和知识点,全面掌握Java技术栈需要深入学习并实践更多内容。
这份2019年的Java面试题集包含了从基础到高级的各类问题,旨在全面评估候选人的技能水平。以下是对其中一些关键知识点的详细解释: 1. **JDK和JRE的区别**:JDK(Java Development Kit)是Java开发工具包,包含...
以下是对2019年最新Java面试题的详细解答和解析: 1. **JDK和JRE的区别**:JDK(Java Development Kit)是Java开发工具包,包含了编译器、调试器等开发工具以及JRE;JRE(Java Runtime Environment)则是Java运行...
以上只是部分Java面试中的常见知识点,实际的面试题可能会更深入,包括设计模式、JVM优化、数据库操作、Spring框架、微服务等相关技术。在准备面试时,不仅要理解这些概念,还要能够灵活应用到实际问题中,以展示...
Java面试中的"八股文"通常指的是面试中经常被问到的经典问题,这些问题涵盖了Java语言的基础、并发编程、集合框架等多个方面。以下是一些重要的Java面试知识点: 1. **String, StringBuffer, StringBuilder的区别**...
序列化用于持久化对象,深拷贝和浅拷贝涉及对象复制的层次。 12. **集合类**:ArrayList、LinkedList、HashSet、HashMap等集合类各有优缺点,适用于不同的场景。例如,ArrayList适合随机访问,LinkedList适合插入...
3. 浅拷贝只复制对象引用,深拷贝复制对象及引用的对象。 六、JavaWeb 1. JSP是视图,Servlet是控制器,JSP负责展示,Servlet处理请求。 2. JSP内置对象包括page、request、response、session、application等,分别...