首页 > 编程语言 >Java面试-基础篇之3

Java面试-基础篇之3

时间:2023-03-21 23:46:34浏览次数:50  
标签:基本 脑子 Java 小羊 基础 数据类型 面试 拷贝

3.Java中的深拷贝和浅拷贝的区别

在解释深浅拷贝前先了解一个数据在Java语言中的类别和存储形式。

我们都知道在Java中,数据都叫做对象,拷贝也是针对对象来做的。在Java中存在基本数据类型和引用数据类型。通俗一点讲,

所有需要“new”的都叫做引用数据类型。而这两类的数据存储时也大不相同。基本数据类型一般是存在栈中,而引用数据类型存在堆内存中。而大部分的基本数据类型的拷贝是在对象实例中发生的,在这里我们只讨论引用数据类型的拷贝。

所谓深浅拷贝,我用一个例子来解释一下。我有一只羊,叫小羊(对象),我要对它进行浅拷贝,我先看看这只羊都有什么特性呢,这只羊呢有四肢(基本数据类型),皮毛(基本数据类型),内脏(基本数据类型),还有一个脑子(引用数据类型),这时候我拷贝一只羊1,这个羊1是从小羊拷贝过来的,所以她也有四肢(基本数据类型),皮毛(基本数据类型),内脏(基本数据类型),但是这个羊1的脑子拷贝的是指向小羊脑子的一个地址,虽然我最后获得了两只羊,但是羊1和小羊是共用一个脑子的,如果小羊的脑子坏掉了,羊1的脑子同样也是坏掉的。这就是浅拷贝。

而深拷贝是我有一只小羊,它有四肢(基本数据类型),皮毛(基本数据类型),内脏(基本数据类型),还有一个脑子(引用数据类型),然后我对它进行拷贝,获得了一个羊2,这个羊2也有四肢(基本数据类型),皮毛(基本数据类型),内脏(基本数据类型),还有一个脑子(引用数据类型),但是呢,羊2虽然有和小羊同样的属性,但是从拷贝完成开始,它们就是两个完全独立的个体。加入我准备从羊2身上割一个羊脑吃掉,羊2必然归西了,但是小羊还是活蹦乱跳的。它们两个是互不影响的。

所谓深浅拷贝,其实是在拷贝对象时,对类的实例对象这种引用类型的不同操作而已。

Java中实现拷贝的方法是类需要实现Cloneable接口,并且覆写clone()方法,来表明这个类是可以被拷贝的。不过这个拷贝是浅拷贝。

深拷贝有3种方法,使用构造函数拷贝;重写Object的clone;序列化。

太困了,写不下去了,深拷贝的3种方法,有机会再补上。GOODNIGHT!

标签:基本,脑子,Java,小羊,基础,数据类型,面试,拷贝
From: https://www.cnblogs.com/stying/p/17242067.html

相关文章

  • JavaWeb使用Kaptcha生成验证码(jar版)
    使用方式 Web项目导入jar包kaptcha-2.3.0.jar1.1:自定义jar包位置 自定义的jar包位置需要点击AddasLibrary才能使用,一般选......
  • 操作系统6道面试题
    202303211.进程和线程的区别进程(Process)和线程(Thread)是操作系统中的两个重要概念。一个进程可以看作是一个正在运行的程序实例,它拥有自己的地址空间、内存、数据栈和其......
  • 基础
    /*//输出第二个整数#include<iostream>usingnamespacestd;intmain(){inta,b,c;cin>>a>>b>>c;cout<<b<<endl;return0;}*//*//输出一个单精度浮点型(保留三位)#include<i......
  • C#基础
    1枚举enumE_MonsterType//定义了一个枚举的变量类型{normal1,//0boss=5,//5normal2,//6,前一个自动加1......
  • MySQL基础:函数
    MySQL基础:函数函数是指一段可以直接被另一段程序调用的程序或代码。字符串函数MySQL中内置了很多字符串函数,常用的几个如下:函数功能CONCAT(S1,S2,...Sn)字符......
  • 获取以今天为起始日期后两周的日期的Java方法
    importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassDateUtils{publicstaticStringgetTwoWeeksLaterDate()......
  • java线程池相关问题
    线程池有几种拒绝策略?当线程池的线程数达到最大线程数时,需要执行拒绝策略。拒绝策略需要实现RejectedExecutionHandler接口,并实现rejectedExecution(Runnabler, T......
  • java异常相关问题
    java中有哪些RunTimeException异常RuntimeException           是那些可能在Java虚拟机正常运行期间抛出的异常的超类,是所有运行时异常的顶级接......
  • java集合相关问题
    Hashmap原理分析ConcurrentHashMap相关问题HashMap和Hashtable和HashTree和ConcurrentMap的比较HashMap和Hashtable和HashTree和ConcurrentMap的区别Vecto......
  • 面试题01
    面试题011面试官上来要看你项目-看你的编码水平-公司的项目看不了的不用慌,给面试官看的都是个人项目开源的-公司项目看不了签了保密协议2数据库如何处理用的......