• 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();
      
  • 相关阅读:
    在Visual Studio 2013中修改远程Git服务器的地址
    自定义TFS工作项“所有链接”列表中的列
    在权限受限制的AD域环境中部署SQL Server AlwaysOn高可用性
    spring boot常用注解
    在线编辑器(WangEditor)
    报表生成(POI,jquery.table2excel.js,Echarts)
    java 相关书籍介绍
    poj2456 Aggressive cows
    poj1064 Cable master
    洛谷P1396 营救
  • 原文地址:https://www.cnblogs.com/humc/p/5205442.html
Copyright © 2020-2023  润新知