赋值-java中如何创建一个对象的副本

问题描述

java中如何创建一个对象的副本
java中基本类型赋值是传递的是值,也就是创建了一个副本,而对象赋值时传递的是引用,那么java中对象能不能创建副本?如何创建

解决方案

需要你自己实现一个clone方法,然后new一个对象,再依次复制每个字段。
你可以用反射或者序列化再反序列化的方法简化复制对象的编程。

解决方案二:
http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html

解决方案三:
你可以赋值给一个新对象

解决方案四:
java传递对象都是引用传递,不过你可以在函数里新建一个对象,然后对这个对象根据传进来的参数进行逐属性赋值,就相当于创建了一个副本

解决方案五:
可以考虑定义类型为struct而不是class。struct都是传值的。

解决方案六:
可以用clone但clone又分深度复制和简单复制
深度复制才是复制了一个新的对象

解决方案七:
引用传递也是值传递,只是把变量的值,也就是对象的地址赋给另一个变量,而自身是没有变的

时间: 2024-09-30 07:22:36

赋值-java中如何创建一个对象的副本的相关文章

JAVA中对象创建和初始化过程

分析一下JAVA中对象创建和初始化过程中涉及的相关概念问题,java中栈(stack)与堆(heap),对象.引用.句柄的概念. 1.Java中的数据类型 Java中有3个数据类型: 基本数据类型(在Java中,boolean.byte.short.int.long.char.float.double这八种是基本数据类型) 引用类型 null类型 其中,引用类型包括类类型(含数组).接口类型. 下列语句声明了一些变量: 以下是引用片段: int k ; A a; //a是A数据类型的对象变量名.

java中不能创建fileoutptstream 类型的对象

问题描述 java中不能创建fileoutptstream 类型的对象 import java.io.*; public class FileOutputStream { public static void main(String[] args) { //定义一个FileOutputStream 类型的变量 FileOutputStream fo = null; try{ //利用绝对路径创建一个FileOutputStream类型的对象 fo = new FileOutputStream (

java 中 ScheduledExecutorService 创建的多线程和 runnable

问题描述 java 中 ScheduledExecutorService 创建的多线程和 runnable 今天用到用ScheduledExecutorService 做定时任务,发现里面可以做多线程的操作.使用起来也很方便. 直接new 个实例就可以了. ScheduledExecutorService executor = Executors .newScheduledThreadPool(10); for (int i = 0; i < 10; i++) { executor.schedu

java 中如何创建hashmap 的代理对象,或者,怎么观察hashmap的改变的前后状态

问题描述 现在有个需求,需要创建可以监听值变化的map,在值变化的前后实现相应的逻辑操作,我首先想到的是代理模式,可是getClassLoader不成功,网上查询的结果貌似map是有java引导加载器加载的,后来想要做监听,但是没有好的思路,希望能得到相关大牛的指引~ 解决方案 解决方案二:定义一个继承map的类,然后在就改值的方法前后增加触发事件,回调相应的监听方法.解决方案三:嗯...继续map,重新put,remove方法,那样你爱干嘛都行解决方案四:引用1楼stonefeng的回复: 定

java中如何用反射创建一个对象

问题描述 java中如何用反射创建一个对象 java中如何用反射创建一个对象 如何理解java的反射,反射是一种怎么样的机制呢 解决方案 楼上说的理论很多了,,给你来点实际的,, Class clazz=Class.forName("test.User"); Object obj=clazz.newInstance(); 这是用反射创建对象的方法之一,,也是最常用的 解决方案二: 反射主要做两件事情,一个是运行时创建(dc)(最典型的,插件程序,插件在主程序后被开发出来,主程序要创建插

浅谈Java中的克隆close()和赋值引用的区别_java

学生类Student: package 克隆clone; /*要克隆必须实现这个借口:Cloneable,以标记这个对象可以克隆 Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制. 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了. */ public class Student implements Cloneable { private String name; private int ag

浅析Java中对象的创建与对象的数据类型转换_java

Java:对象创建和初始化过程 1.Java中的数据类型    Java中有3个数据类型:基本数据类型(在Java中,boolean.byte.short.int.long.char.float.double这八种是基本数据类型).引用类型和null类型.其中,引用类型包括类类型(含数组).接口类型.     下列语句声明了一些变量: int k ; A a; //a是A数据类型的对象变量名. B b1,b2,-,b10000;// 假定B是抽象类或接口. String s;      注意:从

java中为什么有的变量声明而不赋值?

问题描述 java中为什么有的变量声明而不赋值? java中为什么有的变量声明而不赋值?而有的就值,那什么情况下要赋值,什么情况下不赋值 解决方案 比如对象变量,而调用这个变量的构造函数非常耗费时间,所以我们等用到的时候再创建,如果程序运行完都不访问它,就根本不创建,这样可以提高效率. 对于简单变量,比如int float一类的,建议随手给一个初始值. 解决方案二: 你这个问题给你举个例子,你应该就能理解了 例如: int a; 这是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向

java当中创建一个对象的问题

问题描述 java当中创建一个对象的问题 a = new A( ): A a = new A( ): 这两条程序语句是不是一样的 还是说其中一条有语法错误 解决方案 前者必须在此之前定义a,比如 A a; a = new A(); 当然也可以在别的地方定义,比如 private a;定义在类中. 如果没有定义,肯定报错. 解决方案二: 创建一个java对象放到数组当中JAVA创建String对象的问题