在Java中,对于基本类型可以使用“="来进行克隆,此时两个变量除了相等是没有任何关系的。

而对于引用类型却不能简单地使用”=“进行克隆,这与java的内存空间使用有关。

Java将内存空间分成两块,即栈和堆。

在栈中保存基本类型和引用变量;

在堆中保存对象。

对于引用变量而言,使用”=“将修改引用,而不是复制堆中的对象。

此时两个引用变量将指向同一个对象。

因此,如果一个变量对其进行修改则会改变另一个变量。

在克隆对象时,如果对象的成员变量是基本类型,则使用浅克隆即可完成。

如果对象的成员变量包括可变引用类型,则需要使用深克隆。

如果引用类型是不可变的,如String类的对象,则不必进行深克隆。

Java中“=”克隆理解的更多相关文章

  1. 关于java中Stream理解

    关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...

  2. java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换

    java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换 一.字符串与其他类型连接 public class DemoString{ public static void mai ...

  3. 第四节:详细讲解Java中的类和面向对象思想

    前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...

  4. Java:泛型的理解

    本文源自参考<Think in Java>,多篇博文以及阅读源码的总结 前言 Java中的泛型每各人都在使用,但是它底层的实现方法是什么呢,为何要这样实现,这样实现的优缺点有哪些,怎么解决 ...

  5. Java基础——克隆

    1.克隆 假设有一个对象object1,在某处又需要一个跟object1一样的实例object2,这两个对象是绝对独立的,不会因为某一个修改另一个随之改变,这样,我们不能直接将对象objec1t的引用 ...

  6. Java中如何克隆集合——ArrayList和HashSet深拷贝

    编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...

  7. java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)

    java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配, ...

  8. Java中的不可变类理解

    一.Java中的不可变类 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修 ...

  9. Java中的clone方法-理解浅拷贝和深拷贝

    最近学到Java虚拟机的相关知识,更加能理解clone方法的机制了 java中的我们常常需要复制的类型有三种: 1:8种基本类型,如int,long,float等: 2:复合数据类型(数组): 3:对 ...

  10. Java中对Clone的理解

    面试中经常遇到Clone的相关知识,今天总算是把Clone理解的比较透彻了!Java中Clone的概念大家应该都很熟悉了,它可以让我们很方便的“制造”出一个对象的副本来,下面来具体看看java中的Cl ...

随机推荐

  1. [考试记录] 2024.7.15 csp-s模拟赛4

    2024.7.15 csp-s模拟赛4 T1 传送带 题面翻译 有一个长度为 \(n\) 的一维网格.网格的第 \(i\) 个单元格包含字符 \(s_i\) ,是"<"或&q ...

  2. Atcoder ABC298 D-F

    Atcoder ABC298 D-F D - Writing a Numeral 链接: D - Writing a Numeral (atcoder.jp) 简要题意: 问题陈述 我们有一个字符串 ...

  3. Go进程内存占用那些事(二)

    0x01 最简单的Go程序 package main import ( "fmt" "time" ) func main() { fmt.Println(&qu ...

  4. Linux-centos中修改默认root帐户的登录用户名

    vi /etc/passwd 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键退出编辑状态,并输入:x保存并退出 vi /etc/shadow 按i键进入编辑状态 修改第1行第1个 ...

  5. 逆向WeChat (五)

    本篇逆向mmmojo.dll,介绍如何使用mmmojo,wmpf_host_export的mojo. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18216717 ...

  6. C#应用 - 事件总线

    目录 前言 1,简介 2,设计 2.1 设计思路 2.2 设计实现 2.2.1 IEventData 2.2.2 EventBus 2.2.3 用起来 3,问题 3.1 起缘 3.2 改造 3.3 用 ...

  7. 网络安全公开数据集Maple-IDS,恶意流量检测数据集开放使用!

    Maple Dataset 枫叶数据集Maple Dataset枫叶数据集由东北林业大学网络安全实验室(https://maple.nefu.edu.cn/lab/)公开发布,是用于入侵检测评估的数据 ...

  8. JVM笔记八-堆参数调优

    JVM垃圾收集器(Java Garbage Collection).本教程均在JDK1.8+HotSpot为例来讲解的. 先来看看Java7的: 编辑 ​ 再来看看Jva8的 编辑 ​ 从上图中我们可 ...

  9. SpringMVC:文件上传和下载

    文件下载 ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文 使用ResponseEntity实现下载文件的功能 @RequestMapping(& ...

  10. Go实现实时文件监控功能

    一.使用库介绍 fsnotify 是 Go 语言中的一个库,用于监听文件系统的变更事件.它允许程序注册对文件系统事件的兴趣,并在这些事件发生时接收通知.fsnotify 主要用来监控目录下的文件变化, ...