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对象。

     

  • 相关阅读:
    Atitit 经济学常见的流派 古典主义与凯恩斯主义
    Atitit 学习方法 体系化学习方法 Excel 科目,分类,专业 三级分类。。 知识点。。 课程就是每一个知识点的详细化。。 比如经济学 类别 专业 xx概论知识点 3、金
    atiitt it学科体系化 体系树与知识点概念大总结.xlsx
    Atitit 减少财政支出普通人如何蹭政府补贴措施 attilax大总结.docx
    Atitit 信用管理概论 attilax学习心得
    Atitit.月度计划日程表 每月流程表v5
    Atitit 企业6大职能 attilax总结
    Atitit 常见每日流程日程日常工作.docx v8 ver ampm imp 签到 am y 天气情况检查 am y 晨会,每天或者隔天 am 每日计划(项目计划,日计划等。 am
    Atitit 财政赤字解决方案
    Atitit 建设自己的财政体系 attilax总结 1.1. 收入理论 2 1.2. 收入分类 2 1.3. 2 1.4. 非货币收入 2 1.5. 2 1.6. 降低期望 2 1.7.
  • 原文地址:https://www.cnblogs.com/vmax-tam/p/4061934.html
Copyright © 2011-2022 走看看