【Java进阶】java的浅拷贝和深拷贝含义

Java中的深拷贝和浅拷贝 在之前做项目的时候,同组的人因为深拷贝和浅拷贝的问题产生过BUG,当时不是自己负责的部分,没对这个问题做过深入的了解,今天深入学习一下???? 在介绍深拷贝和浅拷贝之前,先温习几个概念。 数据类型 Java中的数据类型有两种: 基本类型:粒度最小的数据类型。主要包括 4种整数类型:int、short、long、byte 2种浮点数类型:float、double 1种字符类型:char 1种布尔... 阅读详情

浅拷贝和深拷贝

  1. 引用的复制:不同的引用指向同一个对象
  2. 浅复制:只复制当前对象,若对象当中还有其他的引用则不复制
  3. 深复制:复制出一个全新的对象,包括里面所有的引用数据类型

下面我们通过代码来理解一下复制的概念

1. 引用的拷贝

//有一个简单的老师类
public class Teacher{
    //姓名
    private Sting name;
    //年龄
    private int age;
    
    //----省去构造方法和getter、setter---------//
}

//引用的复制
@Test
public void test1(){
    Teacher tea1 = new Teacher("方老师", 16);
    Teacher tea2 = tea1;
    
    System.out.println(tea1 == tea2);//true
    //指向的是堆中的同一个对象
}

2. 浅拷贝:

//老师类
//实现标识性接口,让类具有复制的能力
public class Teacher implements Cloneable{

    private String name;
    
    private int age;
    //有一个学生的对象
    private Student student;
    
    //----省去构造方法和getter、setter---------//
    
    //重写Object类的clone方法,修改访问修饰符为public
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

//学生类
public class Student implements Cloneable{

    private String name;
    
    private int age;
    
    //----省去构造方法和getter、setter---------//
    
    //重写Object类的clone方法,修改访问修饰符为public
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

//实现浅复制
public void test2(){

    Student stu1 = new Student("阿文", 18);
    
    Teacher tea = new Teacher("方老师", 16, stu1);
    
    //复制对象,向下转型
    Teacher tea_clone = (Teacher)tea.clone();
    
    System.out.println(tea == tea_clone);//false
    //在堆中划分了一个新的对象指向了这个引用
    
    System.out.println(tea.student == tea_clone.student)//true对象中的引用数据类型指向的还是堆中的同一个对象
}

3. 深拷贝

//以上面的老师类和学生类为基础,我们需要重写clone()方法的方法体
public class Teacher implements Cloneable{

    private String name;
    
    private int age;
    //有一个学生的对象
    private Student student;
    
    //----省去构造方法和getter、setter---------//
    
    //重写Object类的clone方法,修改访问修饰符为public
    @Override
    public Object clone() throws CloneNotSupportedException {
    Teacher teacher = (Teacher)super.clone();
    teacher.sudent = (Student)student.clone();
    return teacher;
    }
}

public void test3(){

    Student stu1 = new Student("阿文", 18);
    
    Teacher tea = new Teacher("方老师", 16, stu1);
    
    //复制对象,向下转型
    Teacher tea_clone = (Teacher)tea.clone();
    
    System.out.println(tea == tea_clone);//false
    //在堆中划分了一个新的对象指向了这个引用
    
    System.out.println(tea.student == tea_clone.student)//false,可以看到我们实现了将该对象的彻底复制
}

//如果引用数据类型存放的是List集合,同理要将List复制一遍,再把里面存放的所有对象复制一遍
public Object clone() throws CloneNotSupportedException {
    Teacher teacher = (Teacher) super.clone();
    ArrayList<Student> students = new ArrayList<>();
    for (Student stu : teacher.student) {
        students.add((Student) stu.clone);
    }
    teacher.student = students;
    return teacher;
}

4. 使用序列化的方式实现拷贝

以上演示的是使用clone()的方法实现深复制,我们同样可以使用序列化反序列化实现深复制

//教师类实现序列化的接口
public class Teacher implements Serializable{

    private String name;
    
    private int age;
    //有一个学生的对象
    private Student student;
    
    //----省去构造方法和getter、setter---------//
    
    public Object deepClone() throws IOException, ClassNotFoundException {
        //创建字节数组型的字节输出流
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //序列化
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        
        oos.writeObject(this);
        //反序列化
        ObjectInputStream ois = new ObjectInputStream(new  ByteArrayInputStream(bos.toByteArray());
        
        return ois.readObject();
    }
}

//学生类,实现序列化的接口
public class Student implements Serializable{

    private String name;
    
    private int age;
    
    //----省去构造方法和getter、setter---------//
    
}

@Test
public void test4(){
    Student stu1 = new Student("阿文", 18);
    
    Teacher tea = new Teacher("方老师", 16, stu1);
    
    //复制对象,向下转型
    Teacher tea_clone = (Teacher)tea.deepClone();
    
    System.out.println(tea == tea_clone);//false
    //在堆中划分了一个新的对象指向了这个引用
    
    System.out.println(tea.student == tea_clone.student)//false,可以看到我们实现了将该对象的彻底复制
}
Java 深拷贝 和 浅拷贝 clone 关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用传递将会有更深的理解。 1、创建对象的5种方式 通过 new 关键字 这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Obje... 阅读详情

相关推荐

AD936x Evaluation Software 详细配置

作者:ShownSun 工作室:时沿科技 文章目录AD936x Evaluation Software详细配置1 系统概述2 AD9361 Wireless Transceiver Evaluation Setup2.1 标签描述2.2 用户参数2.3详细配置3 AD936x RF Wizard3.1 标签描述3.2 用户参数3.3 详细配置4 AD936x Digital Filter Wizard4.1 标签描述4.1.1 时钟配置4.1.2 滤波器配置4.1.3 接收滤波器配置4.1.4 发射滤..

ShownSun博客 5190

Java中的浅拷贝与深拷贝

接下来,我们使用“==”判断person1和person2中的address是否是同一对象,结果为false,即两个对象的address成员变量指向的是不同的地址。总的来说,浅拷贝只是将原始对象的引用类型成员变量复制到新的对象中,因此新对象中的引用类型成员变量与原始对象中的成员变量指向同一对象。浅拷贝是指在对一个对象进行拷贝时,只拷贝对象本身和其中的基本数据类型,而不拷贝对象内部的引用类型。深拷贝是指在对一个对象进行拷贝时,不仅拷贝对象本身和其中的基本数据类型,同时也拷贝对象内部的引用类型。

2301_77181435的博客 9835

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6458

Java深拷贝和浅拷贝(简单易懂)

也就是说,浅拷贝只是复制了对象的“顶层”,对于引用类型的成员,实际上复制的是引用,而不是引用所指向的对象。深拷贝(Deep Copy):创建一个新对象,不仅复制基本数据类型成员的值,对于引用数据类型的成员,也会为其创建新的对象,并复制其内容,使得新对象和原始对象完全独立,修改其中一个对象的引用类型成员不会影响到另一个对象。3.遵循 Java 的异常处理原则:对于可能出现异常的操作,按照良好的编程实践,应当声明可能抛出的异常,以便调用者能够进行适当的异常处理,增强程序的健壮性和可靠性。

shajjs的博客 5007

UI-TARS本地部署

UI-TARS是一个用于本地部署的交互控制模型,支持桌面应用的自动化操作。部署步骤包括:首先,从官方GitHub仓库下载项目源码和模型checkpoint;其次,使用vLLM框架进行本地模型部署,启动API服务;最后,通过客户端调用API实现功能。部署过程中可能遇到pynvml模块或模型配置问题,提供了相应的解决方案。此外,还支持通过UI-TARS-Desktop客户端进行本地桌面应用的交互控制。整体流程旨在帮助用户快速实现UI-TARS的本地部署与应用。

DYF的博客 2531

香橙派R1 Plus LTS变身无线AP/客户端:手把手教你用RTL8811CU和MT7601U网卡刷OpenWRT

本文详细介绍了如何将香橙派R1 Plus LTS开发板通过RTL8811CU和MT7601U两款USB无线网卡刷入OpenWRT系统,实现无线AP热点发射与客户端接入的双重功能。从硬件选型、驱动安装到双网卡协同配置,提供完整的实战指南,帮助用户快速搭建稳定高效的无线网络解决方案。

weixin_30919429的博客 408

java的深拷贝和浅拷贝

浅拷贝和深拷贝

weixin_45771158的博客 4451

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

java干货 浅拷贝和深拷贝

java干货 浅拷贝和深拷贝

qq_51305563的博客 3736

从零开始学习PX4源码9(部署px4源码到gitee)

由于PX4-Autopilot托管在github,在没有翻墙的情况下,下载固件无法下载。为了提高下载速度,这里将PX4在github上的仓库以及其子仓库(依赖仓库)都搬移到gitee上了。本教程讲解如何快速部署px4固件到gitee上,实现不需要翻墙快速本地就可以下载PX4固件。暂时没有找到如何批量直接通过修改.gitmodules后,使用什么命令可以直接把所有的一级二级子模块的指向直接正常映射。!!

陌城烟雨 810

手把手教你学simulink实例--基于Simulink的船舶动力装置性能评估与仿真

船舶动力装置是船舶运行的核心系统,其性能直接影响船舶的安全性、经济性和环保性。基于MATLAB/Simulink平台进行船舶动力装置性能评估与仿真是研究和优化船舶动力系统的重要手段。通过建模与仿真,可以分析动力装置在不同工况下的性能表现,并验证控制策略的有效性。本项目旨在构建一个完整的船舶动力装置性能评估与仿真模型,包括发动机建模、传动系统建模、负载分析以及性能评估模块,并通过仿真分析其动态响应和性能指标。

MHD0815的博客 972

JAVA 浅拷贝和深拷贝

在 java 中,默认的拷贝指的是类重写 Object 类中的 clone 方法,调用该方法进行拷贝。使用 clone 方法生生成新的对象,此时在堆中产生新的对象,clone 存放了该对象的引用。对浅拷贝进行加强,对象中引用属性进行 clone 操作,以下例子 User 类 clone 的时候也对 animal 进行拷贝。深拷贝相对于浅拷贝而言,会对所有数据类型都进行拷贝一份,包括这个对象所包含的内部对象。User 类实现 Serializable 接口,对堆区中的实例进行读写,从而实现对实例的全部拷贝。.

skystep的博客 3968

《Zephyr OS 入门与实战》第15章:LoRaWAN 集成

【代码】《Zephyr OS 入门与实战》第15章:LoRaWAN 集成。

2301_79143213的博客 606

一文深入Java浅拷贝和深拷贝

值类型和引用类型 理解浅拷贝之前我们需要分清楚值类型(int、float…)、包装类(Integer、Double…)以及自己定义类等类,其实就就是值类型和引用类型两种. 就像上面这个图中,int a=1024是值类型的所以是变量a就是直接等于实际的值1024,而object obj1、object obj2显然是引用类型,obj存储的不是实际的对象,而是对象在堆中的地址。 原型模式-浅拷贝和深拷贝图解 浅拷贝:根据上面来讲解,原型对象在被克隆后克隆出来的新对象和原型对象的地址是不一样的,在克隆出

芝士味椒盐的博客 1095

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

解释Java中的深拷贝和浅拷贝有什么区别?

在Java中,拷贝是指将一个对象的值复制到另一个对象的过程。根据拷贝的方式不同,拷贝可以分为深拷贝和浅拷贝两种。两者的区别往往让很多Java初学者感到困惑,本文将详细解释这两种拷贝的定义、区别,并通过代码示例展示如何实现深拷贝和浅拷贝。希望通过本篇文章,你能彻底理解它们的不同之处,并能够在实际编程中灵活应用!😄浅拷贝是指创建一个新对象,然后将原对象的所有基本类型字段和引用类型字段的引用值拷贝到新对象中。这意味着如果对象的字段是引用类型(比如数组、集合、对象等),那么拷贝后的新对象和原对象会共享这些引用字段。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java,深拷贝和浅拷贝

深拷贝和浅拷贝

水w的博客 1594

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深拷贝和浅拷贝

浅拷贝是指会创建一个新对象,但是只复制原始对象的基本类型字段或引用,如果原始对象存在引用类型的字段,拷贝对象和原始对象的引用类型字段会共享同一个实体,对拷贝对象的修改可能会影响原始对象。拷贝对象:Person{name='张三', sex='男', address=Address{city='上海'}}拷贝对象:Person{name='张三', sex='男', address=Address{city='上海'}},并赋值给Person的拷贝对象。可以看到对拷贝对象的修改影响了原始对象,

qq_39464523的博客 2171

什么是浅拷贝和深拷贝

浅拷贝和深拷贝初学习

林隐的博客 1716

浅拷贝和深拷贝的基本含义和应用场景

在日常的开发中,我们常常遇到一些我们不懂的知识,比如我最近看到一个Object.assign() ,就不太清楚其究竟代表着啥意思,因而在查阅资料后,得知其是前端浅拷贝的一种方式。以前也有听说过深拷贝,但不太清楚其代表的意思。因此,今天借此篇博文,来看看什么是浅拷贝,什么又是深拷贝,它们又是如何在开发中运用的。......

lydon1314的博客 3948

基于java实现浅拷贝和深拷贝

浅拷贝:在拷贝一个对象时,复制基本数据类型的成员变量,但对引用数据类型的成员变量只进行引用的传递(复制其地址引用),并不会创建一个新的对象。简单地说就是被拷贝对象和浅拷贝得到的新对象,它们的引用数据类型的成员变量指向同一个内存地址。 深拷贝:在拷贝一个对象时,除了复制基本数据类型的成员变量,对引用数据类型的成员变量进行拷贝时,会创建一个新的对象来保存引用类型的成员变量。 简单地说就是被拷贝对象和深拷贝得到的新对象,它们的引用数据类型的成员变量指向不同的内存地址。...

基地的博客 3187

Java浅拷贝深拷贝

Java浅拷贝深拷贝 浅拷贝和深拷贝涉及到了Object类中的clone()方法 实现浅拷贝 浅拷贝的实现需要类重写clone()方法 浅拷贝会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝 如果属性是基本类型,拷贝的就是基本类型的值; 如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象,导致两个对象的引用不等。 实现浅拷贝很简单只需要将类实现Cloneable接口然后重写clone方法即可 class Person imple

双双博客 2301

JAVA深拷贝与浅拷贝

在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。而深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。

m0_47498690的博客 1364

Java基础-深拷贝和浅拷贝的区别

最近这段时间太忙了。以至于之前一篇博文没办法写下去。 趁着今天早上有1个半小时的空闲,写一篇 深拷贝与浅拷贝   为什么要拷贝? Java克隆是为了得到一个 完全一致的对象。 相同点:对象完全一样。这包括里头所有的变量,对象。 不同点:对象的内存地址不一样。   深拷贝与浅拷贝 一般来说,拷贝的类型分为 深拷贝与浅拷贝。 |———————————————————————————

王学明 8073

Java的深拷贝和浅拷贝

和。

学习记录 1189

浅拷贝和深拷贝(Java 与 JavaScript)

浅拷贝和深拷贝(Java 与 JavaScript)

白白白鲤鱼的博客 1168
上一篇: 【Linux】linux下两台机器互相发送文件scp命令,以及配置ssh免密登陆
下一篇: 【Java高级特性】java学习之旅33-IO流
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

JeffHan^_^

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

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

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

打赏作者

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

抵扣说明:

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

余额充值