Java String源码阅读
String的源码阅读
主要依赖于ArrayList
、Arrays
、Comparator
、StringJoiner
和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.copyOf
和System.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源码阅读相关推荐
- 程序兵法:Java String 源码的排序算法(一)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...
- java经典源码 阅读_公开!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例...
我们为啥要阅读源码? 为什么面试要问源码?为什么我们Java程序员要去看源码?相信大多数程序员看到源码第一感觉都是:枯燥无味,费力不讨好!要不是为了"涨薪"我才不去看这个鬼东西!但 ...
- Java - String源码解析及常见面试问题
文章目录 Pre Q1: String 是如何实现的? Q2: String 有哪些重要的方法? 构造函数 equals() compareTo() [equals() vs compareTo() ...
- 从 重复叠加字符串匹配 看Java String源码中的contains方法
原题:重复叠加字符串匹配 解题思路已经写在代码中了: class Solution {public:bool contain(string &a, string &b, long lo ...
- Java String源码解析
String类概要 所有的字符串字面量都属于String类,String对象创建后不可改变,因此可以缓存共享,StringBuilder,StringBuffer是可变的实现 String类提供了操作 ...
- java jute_ZooKeeper源码阅读(六):JUTE
[ZooKeeper中的Leader选举也不是Paxos, 实现相关的类包括FastLeaderElection, LeaderElection.FastLeaderElection: Leader选 ...
- java jute_ZooKeeper源码阅读(六):JUTE | 学步园
JUTE是跨语言序列化/反序列化工具,类似Thrift 用于产生java/c版本的消息类 比如: zkDataBase.addCommittedProposal: QuorumPacket pp = ...
- 【java】java String 源码
1.概述 /*** 1.字符串的值创建之后是无法改变的* 2.String buffers 支持可变字符串.* 3.因为String对象是不可变的,所以可以共享它们.** String str = & ...
- 走过的路-java源码阅读之路
源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 一.人生三种境界: 1.昨夜西风凋碧树,独上高楼望尽天涯路. 2.衣带渐宽终不悔,为伊消得人憔悴. ...
最新文章
- PAT甲级排队问题合集 (持续更新中)
- 闪电网络真的是比特币最好的扩容解决方案吗?
- HBase之HFile解析
- 成功解决pycharm 没有菜单栏
- 力扣: 88. 合并两个有序数组
- win10虚拟机下载安装安全狗(Apache版本)
- 看图工具—IrfanView
- Web应用部署在WebLogic中Basic认证无法运行问题及解决
- 移除加密的pdf文件密码
- 【蓝桥杯】题目 1117: K-进制数
- HTML 5.2 有哪些新内容?
- 解决git冲突造成的Please move or remove them before you can merge
- c语言数字转化为英文版,(C语言编写的英语数字转化代码数字转化为用英语表达的数字.doc...
- 安装mediawiki维基百科
- python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式...
- WordPress插件:WP No Category Base 去除分类Category目录
- 读书笔记:-----《第四次工业革命转型的力量》
- linux虚拟机重启后,telnet不通端口的排查思路
- Java中 构造方法 和 成员方法 的区别(图文介绍)
- 你的爬虫会送你进监狱吗?
热门文章
- 清明节 | 数字经济中台战略报告盘点
- 基于springboot的图书馆管理系统
- 原地铅球讲解计算机三级,原地侧向推铅球技术教学的内容与方法。(右手推球为例)...
- 爬虫实例 利用Ajax爬取微博数据
- 骗补刷量 黑产变现|短视频及直播行业的暗流涌动...
- 什么牌子的蓝牙耳机好用?盘点五款性价比超高的蓝牙耳机品牌
- 释放oracle undo表空间,undo表空间释放
- Python画箱型图之seaborn
- 海思多媒体(MPP)开发(10)——通道绑定
- C语言——操作符(详解)