java源码解析之String类(二)】的更多相关文章

上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并未初始化 副本构造器:String(String s),简单的赋值,得到的是一个副本,俩个引用指向的是常量池中的同一个String,但是String是不可变的,所有用意不大 byte类构造器:String(byte[] b),将byte数组转换为String,注意并不是简单的赋值,而是整体copy一份 cha…
String是我们接触最多的类,无论是学习中还是工作中,基本每天都会和字符串打交道,从字符串本身的各种拼接.切片.变形,再到和其他基本数据类型的转换,几乎无时无刻都在使用它,今天就让我们揭开String神秘的面纱,这一小节主要讲解String的源代码是怎么构建的,下一节是String的一些疑点难点,通常在面试中会被问到. 在学习String之前,让我们先简单的看一下JVM的内存模型,附图一张,来自百度百科: 在java的每一个通过编译生成字节码文件后,运行期JVM将字节码文件(也就是class文…
上一节我们主要讲了String类的一些不是很常用的方法,其中需要掌握的如下,我就不再赘述了 public int length() public boolean isEmpty() public byte[] getBytes() public byte[] getBytes(String charsetName) public char charAt(int index) public boolean equals(Object anObject) public boolean equalsI…
/* * 返回指定字符第一次出现的字符串内的索引 */ public int indexOf(int ch) { return indexOf(ch, 0); } /* * 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索 * 其中Character.MIN_SUPPLEMENTARY_CODE_POINT是指字符是小于两个字节的 */ public int indexOf(int ch, int fromIndex) { final int max = value.length;…
/* * 切片函数,非常重要,这里一定要牢记beginIndex是开始位置,endIndex是结束位置,区别于以前学的offset是开始位置,而count或length是个数和长度 * 比如说,new String("abcdefg",1,3)得到的是bcd * 而 "abcdefg".substring(1,3)得到的是bc,也就是下标为1和2的俩个字符,并不包括c */ public String substring(int beginIndex) { if (…
ArrayBlockingQueue源码解析 ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口.底层以数组的形式保存数据(实际上可看作一个循环数组).常用的操作包括 add ,offer,put,remove,poll,take,peek. 一.类声明 public class ArrayBlockingQueue<E> extends AbstractQueue<E> i…
一.Object类概述   Object类是java中类层次的根,是所有类的基类.在编译时会自动导入.Object中的方法如下: 二.方法详解   Object的方法可以分成两类,一类是被关键字final修饰的的方法,这类方法能被子类覆盖.另一类是没有final修饰,它们可以被子类重写. 构造方法:Object()   在Object中没有显式的构造方法,这个只是创建一个Object对象,没有什么可以说的. getClass()   getClass被final修饰,不能被子类重写.它返回的是正…
上一个章节,笔者向大家介绍了spring是如何来过滤配置类的,下面我们来看看在过滤出配置类后,spring是如何来解析配置类的.首先过滤出来的配置类会存放在configCandidates列表, 在代码<1>处会先根据配置类的权重做一个排序,权重越低的配置类排在越前,在解析的时候也越先解析.之后会根据configCandidates列表生成一个set集合candidates,防止configCandidates列表存在相同的元素.之后会在<3>处解析这些配置类,并在<4>…
String类下的compareTo(String otherString)方法的源码解析 一. 前言 近日研究了一下String类的一些方法, 通过查看源码, 对一些常用的方法也有了更透彻的认识, 也让我更加理解了设计者的算法思想. 我也推荐大家多读读源码, 我相信大家也会有意想不到的收获. 二. 实战 今天我分析的是String类的compareTo(String otherString)方法, 以下是我个人的分析观点, 如有哪里分析不到位的地方, 欢迎大家指出, 相互学习, 共同进步 !…
上文我们讲了HashMap那骚骚的逻辑结构,这一篇我们来吹吹它的实现思想,也就是算法层面.有兴趣看下或者回顾上一篇HashMap逻辑层面的,可以看下HashMap源码解析(一).使用了哈希表得“拉链法”. 我打算按这个顺序来讲HashMap:几个关键属性 -> 构造方法-> 存取元素方法 ->解决hash冲突方法->HashMap扩容问题. 4个关键属性: /** *HashMap的存储大小 */ transient int size; /** * HashMap的大小临界值,如果…