zoukankan      html  css  js  c++  java
  • ==和equals的区别和联系,StringBuffer和StringBuilder,clone方法

    ==和equals的区别和联系?

    ( 1)对于==,比较的是值是否相等

         如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

      如果作用于引用类型的变量,则比较的是所指向的对象的地址

    ( 2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象

       如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

       如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

    StringBuffer和StringBuilder区别? 

    String 是被final修饰的,长度是不可变的。StringBuffer和StringBuilder长度都是可变的

    1、运算速度比较(通常情况下):  StringBuilder > StringBuffer > String

    2. 线程安全性 :  StringBuilder(非线程安全)、StringBuffer(线程安全的)

    使用场景:

    String:适用于少量的字符串操作。

    StringBuilder:适用于单线程下在字符串缓冲区进行大量操作。

    StringBuffer:适用于多线程下在字符串缓冲区进行大量操作。

     java克隆对象clone()的用法和作用?

      Object类中提供了一个clone()方法,若需修改一个对象,同时不想改变调用者的对象,就要制作该对象的一个本地副本。

       用法:1.实现clone 接口,2.重写clone方法。3、在clone()方法中调用super.clone()。

    什么是浅复制什么是深复制?

      浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

      深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

      总结:Java在重载clone()方法时也存在同样的问题,当类中只有一些基本数据类型时,采用上述的方法就可以了,但是当类中包含了一些对象(list)时,就需要用到深复制了。

    怎么实现深复制?

      实现方法是在对,对象调用clone()方法完成复制后,接着对对象中的非基本数据类型的属性也调用clone()方法完成深复制(非数据类型本身也要实现Cloneable接口重写clone()方法你才能完成深复制)

  • 相关阅读:
    查询集 QuerySet
    JWT的认识和session的区别
    Django REST framework 简介
    Django自动获取项目中的全部URL
    flask数据库迁移
    类中方法的两种调用方式
    flask项目配置
    NOIP 模拟 $19; m u$
    NOIP 模拟 $18; m 老司机的狂欢$
    NOIP 模拟 $18; m 炼金术士的疑惑$
  • 原文地址:https://www.cnblogs.com/lgg20/p/12330999.html
Copyright © 2011-2022 走看看