• String源码学习


    String源码学习

    零散的收获

    1. 数组的元素类型可以通过getComponentType来获取到
    2. 子类型的数组可以赋值给父类型的数组,。但是并不存在继承关系。数组的父类是Object。
    3. 通过声明如下代码来控制需要序列化的field

      private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];

    4. Java中的char都是以unicode编码来保存字符的,占用2个字节。

    5. might be near -1>>>1. 这句话的意思是,可能会达到Interge.Max_Value,为什么呢? -1的二进制表示是全1.那么>>>之后,就变成了最高位为0,其他全为1,也就是int所表示的最大整数了。此时对这个数字做加法可能会溢出,所以会将a + b > c表示成 a > c - b,就不会有溢出问题了。
    6. Matcher.quoteReplacement方法将输入的字符串转换为其对应的字面值,其实就是讲输入参数中的和$都替换为两个,也就等同于字面值了。

    常用方法

    • concat

      将两个字符串连接为一个,通过调用两次System.arrayCopy来高效完成,第一次生成一个包含两个string长度的字符数组并将自身拷贝进去,然后将第二个string拷贝到剩下的部分中。

    • replace(char,char)

      replace的实现可以很简单,先直接复制一个,然后逐个替换掉出现的字符即可。但是作者并没有这么实现,而是充分考虑了性能。

      • 如果两个输入字符相同,那么直接返回自身即可。
      • 如果待替换的字符没有出现,那么直接返回自身即可。

      基于上面的两个考虑,实现先判断了两个入参是否相同,如果不同,那么先尝试去寻找这个待替换的字符串,如果找到了,这时才会new一个新的字符数组将内容拷贝过去。

      不得不说,对性能的敏锐和态度,很能看出一个程序员的水准。

    • match

      输入一个正则表达式,判断是否和这个字符串匹配。

    • replaceAll

      将字符串中所有匹配输入正则表达式的部分替换为第二个参数

    • split

      根据给定的序列将字符串分割,可以指定最多分割多少份。

    • format

      类似C语言的格式化语法,参考java.util.Formatter

    • valueOf

      return (obj == null) ? "null" : obj.toString();
      
  • 相关阅读:
    文件打开的几种访问模式
    数据分析师简介
    python数据处理----常用数据文件的处理
    markdown使用方法介绍
    gdb调试常用方法介绍
    [OPEN CV] 常用视频操作方法
    [转载]C++中四种强制类型转换方式
    python 定时服务模块
    pymysql安装和使用
    VS2019开发Qt程序中文乱码
  • 原文地址:https://www.cnblogs.com/humc/p/5205442.html
Copyright © 2020-2023  润新知