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()方法你才能完成深复制)

  • 相关阅读:
    conrtex 和 ARM 的关系
    C语言中的内存分配深入
    钳位电路
    向量中断与非向量中断的区别
    Freescale PowerPC处理器优势
    路由器端口映射,远程桌面连接端口映射+花生壳=让人访问你个人服务器或WEB站点
    linux 下用G++编译C++
    Javascript基础知识篇(1): 初识Javascript
    Javascript实战应用篇(3):动态加载JS和CSS文件
    Javascript高级技术篇(1):搭建JS框架类库
  • 原文地址:https://www.cnblogs.com/lgg20/p/12330999.html
Copyright © 2011-2022 走看看