String的源码阅读

主要依赖于ArrayListArraysComparatorStringJoiner和nio包的Charset类。

Java程序中所有的字符串字面量都是由该类的实例来实现的。

正因为String对象是不可变的,所以他们在多线程下可以共享,是线程安全的。

String 方法不可以把null作为参数去构造对象,会造成NullPointerException异常。

String类是用final修饰的,表示其不可被继承。内部实现主要是final char vale[]

https://blog.csdn.net/iteye_11964/article/details/82554858

上述博客是关于java源码类中的uid。

  • String的构造函数其实内存就是参数的复制或者Arrays.copyOfRange()实现的。
equals()方法

首先先判断是不是同一个对象,是返回true。如果不是同一个对象的话,判断长度是否相等,接着逐个对比字符,如果都相等的话,那么就会返回true,否则返回false。

compareTo()方法

比较字符串大小,先取较短字符串长度,遍历短长度,如果字符不想等,返回相减的值。大于0,前一个大,小于0,参数内字符串大。都相等,比较二者谁更长。

String内部类CaseInsensitiveComparator实现了大小写不敏感的字符串的比较。和原字符串比较的代码相比,添加tolowercase统一转化为小写,再进行比较。

regionMathches()方法

获得char[] 数组和偏移点,判断越界信息,接着在范围内逐个比较,不等返回false;全部相等返回true。

startwith判断前缀函数,实现和regionMatches方法类似。

hashcode()方法

将每个字符✖31再加上当前字符的ascii编码值。

indexOf(int)方法与lastindexOf(int)方法

找寻ascii值与字符串数组值相同的值,返回其下标索引。

  • unicode前10位和后10位。

lastindexOf()从后往前数,找到最后一个数组内ascii码相同的数值。

indexOf(找到相同的字串KMP算法)
subString()方法

查看参数是否为0,为0返回原来字符串,否则用String内部构造函数的方法,新构造一个字符串,并返回新字符串。

concat()方法

底层采用Arrays.copyOfSystem.copyOf的方法

contains()方法

判断子序列是否存在,用的是indexOf方法。

split()方法
list.subList(0, resultSize).toArray(result);

可以实现从ArrayList转为数组。很好用,仅适用于包装类。

trim()方法

裁剪掉左右两端ascii码小于32的字符。小于32的为非打印字符,32的为空格。

join()连接多个字符串

底层还是用StringBuilder()方法

tolower和toupper方法

用的是Character的tolower和toupper方法。

valueOf()静态方法

将其他类型转化为字符串类型。

intern()方法

这个方法是本地方法。char是通过构造的方式,而boolean变量是通过三元表达式转换。

当调用intern方法的时候,如果常量池包含了这个String对象的时候,就返回这个字符串对象。否则这个对象就会添加到常量池,并且返回这个对象的引用。

参考:https://blog.csdn.net/iteye_11964/article/details/82554858

Java String源码阅读相关推荐

  1. 程序兵法:Java String 源码的排序算法(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...

  2. java经典源码 阅读_公开!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例...

    我们为啥要阅读源码? 为什么面试要问源码?为什么我们Java程序员要去看源码?相信大多数程序员看到源码第一感觉都是:枯燥无味,费力不讨好!要不是为了"涨薪"我才不去看这个鬼东西!但 ...

  3. Java - String源码解析及常见面试问题

    文章目录 Pre Q1: String 是如何实现的? Q2: String 有哪些重要的方法? 构造函数 equals() compareTo() [equals() vs compareTo() ...

  4. 从 重复叠加字符串匹配 看Java String源码中的contains方法

    原题:重复叠加字符串匹配 解题思路已经写在代码中了: class Solution {public:bool contain(string &a, string &b, long lo ...

  5. Java String源码解析

    String类概要 所有的字符串字面量都属于String类,String对象创建后不可改变,因此可以缓存共享,StringBuilder,StringBuffer是可变的实现 String类提供了操作 ...

  6. java jute_ZooKeeper源码阅读(六):JUTE

    [ZooKeeper中的Leader选举也不是Paxos, 实现相关的类包括FastLeaderElection, LeaderElection.FastLeaderElection: Leader选 ...

  7. java jute_ZooKeeper源码阅读(六):JUTE | 学步园

    JUTE是跨语言序列化/反序列化工具,类似Thrift 用于产生java/c版本的消息类 比如: zkDataBase.addCommittedProposal: QuorumPacket pp = ...

  8. 【java】java String 源码

    1.概述 /*** 1.字符串的值创建之后是无法改变的* 2.String buffers 支持可变字符串.* 3.因为String对象是不可变的,所以可以共享它们.** String str = & ...

  9. 走过的路-java源码阅读之路

    源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 一.人生三种境界: 1.昨夜西风凋碧树,独上高楼望尽天涯路.           2.衣带渐宽终不悔,为伊消得人憔悴.           ...

最新文章

  1. PAT甲级排队问题合集 (持续更新中)
  2. 闪电网络真的是比特币最好的扩容解决方案吗?
  3. HBase之HFile解析
  4. 成功解决pycharm 没有菜单栏
  5. 力扣: 88. 合并两个有序数组
  6. win10虚拟机下载安装安全狗(Apache版本)
  7. 看图工具—IrfanView
  8. Web应用部署在WebLogic中Basic认证无法运行问题及解决
  9. 移除加密的pdf文件密码
  10. 【蓝桥杯】题目 1117: K-进制数
  11. HTML 5.2 有哪些新内容?
  12. 解决git冲突造成的Please move or remove them before you can merge
  13. c语言数字转化为英文版,(C语言编写的英语数字转化代码数字转化为用英语表达的数字.doc...
  14. 安装mediawiki维基百科
  15. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式...
  16. WordPress插件:WP No Category Base 去除分类Category目录
  17. 读书笔记:-----《第四次工业革命转型的力量》
  18. linux虚拟机重启后,telnet不通端口的排查思路
  19. Java中 构造方法 和 成员方法 的区别(图文介绍)
  20. 你的爬虫会送你进监狱吗?

热门文章

  1. 清明节 | 数字经济中台战略报告盘点
  2. 基于springboot的图书馆管理系统
  3. 原地铅球讲解计算机三级,原地侧向推铅球技术教学的内容与方法。(右手推球为例)...
  4. 爬虫实例 利用Ajax爬取微博数据
  5. 骗补刷量 黑产变现|短视频及直播行业的暗流涌动...
  6. 什么牌子的蓝牙耳机好用?盘点五款性价比超高的蓝牙耳机品牌
  7. 释放oracle undo表空间,undo表空间释放
  8. Python画箱型图之seaborn
  9. 海思多媒体(MPP)开发(10)——通道绑定
  10. C语言——操作符(详解)