zoukankan      html  css  js  c++  java
  • String类详解,StringBuffer

    先说一下String类的equals()方法。

    下面我们先看一段代码:

    这段代码输出的结果为:

    ture

    true

    --------------

    false

     

    咋看之下貌似Object类比较特别,那么我们看一下Object下的equals()方法的源代码

    Object下的queals()方法十分简单,就是单纯的判断这两个引用是不是指向同一个对象,是的话返回true,不是的话返回false。

     

    可是把这个方法应用在上面代码的String对象身上明显不对,那么String类里面必定重写了equals()方法,来看一下它的源代码:

    从这个方法的源代码可以看出,String类的equals()方法时这样运作的:

    1)先判断两个引用是否指向同一个对象,是的话直接返回true。

    2)判断实参是否是String的一个实例,不是的话直接返回false。

    3)实参是String的一个实例,那么把实参的传进来的字符串 逐个字符 与 当前字符对比看看是否一致。

     

    总结:

    A)equals()方法:该方法定义在Object类当中,因此Java的每个类都有该方法,对于Object类的equals()方法来说,它判断调用者与传进来的引用时否指向同一个对象。所以对于Object类来说,equals()方法等价于==。

     

    B)对于String类来说,equals()方法判断当前字符串与传进来的字符串的内容是否一致。

     

    下面考虑Srting各种赋值的情况:

    一)拼接

    输出结果为: hello world

    a)给予s1 与 s2 赋值后,不能再改变它们的值了,因为它们是常量。

    b)而s3赋值采用 + 拼接字符串,实际上是生成了一个新的对象,而不是往一个空的对象里增加内容。

     

    二)采用字面值赋值方式

    首先要加入一个新的概念:String Pool(字符串池)

    当采用Sting s = “aaa" 这种字面方式赋值,系统会有以下操作

    1)查找String Pool 中是否存在”aaa“这个对象,如果不存在,就在池里创建一个“aaa”对象,然后把池中“aaa”对象的地址返回来赋给s,这样s就指向那个对象了

    2)如果池中已经存在“aaa”对象,那么就直接把地址返回给s。

    所以上述代码输出为: true

     

    三)采用new方式

    采用这种方式赋值,系统会有如下操作:

    1)首先在String Pool中查找有没有“aaa”这个字符串对象,如果有,则在堆(heap)中创建一个“aaa”字符串对象,把堆中的这个“aaa”的地址返回来赋给str引用。

    2)如果String Pool还没有“aaa”,就先在池中创建一个,再在堆中创建一个,然后把堆中“aaa”的地址返回来赋给str引用。

    上述代码输出为: false   因为两个String引用指向堆中不同的对象,但是这两个对象的值是“aaa”,然而地址不同。

    ---------------------------------

    ---------------------------------

    A)intern()方法

    String类中有一个intern()方法,该方法系统操作如下:

    1)当一个字符串String str = "abc"调用该方法:str.intern(),系统会检测字符串池中是否有"abc",有得话这个方法就返回池中对于字符串的地址。

    2)若池中没有,则在池中添加该字符串,再把该字符串在池中的地址返回来。

    总结:可见,intern()方法用来得到字String Pool中对应字符串的地址。

    那么 现在有两个字符串 s 和 t ,要使 s.intern() == t.intern() 的条件是什么,

    分析:只要s和t的字符串值相等即可,那么调用intern()方法必然会返回同一个池中对象。

    即: s.equals(t) == true

    B)StringBuffer类

    StringBuffer是一个可变的字符串类,利用append()方法可以在原有字符串基础上添加字符串。

     

    上述代码说明,可以连续用append()方法添加字符串。

    还有上述代码运用了toString()方法,返回一个字面值相同的String对象。

     

  • 相关阅读:
    转载:生产级实践之集群搭建方案系列PostgreSQL主从部署搭建与配置 规格严格
    在my.cnf中设置lower_case_table_names = 1 无效的解决方法【转载】 规格严格
    Druid sql解析 规格严格
    powa 规格严格
    【snmp】snmpwalk 指定端口 规格严格
    Chrome您的连接不是私密连接解决办法 规格严格
    MEF程序设计指南九:重组(Recomposition)MEF部件
    MEF程序设计指南八:部件生命周期(Parts Lifetime)托管
    项目管理学习笔记二:信息系统服务管理
    项目管理学习笔记一:信息化知识
  • 原文地址:https://www.cnblogs.com/vmax-tam/p/4061934.html
Copyright © 2011-2022 走看看