最近指导几位新人,学习了一下String,StringBuffer和StringBuilder类,从反馈的结果来看,总体感觉学习的深度不够,没有读出东西.其实,JDK的源码是越读越有味的.下面总结一下我读这些源码的收获吧. 注意:虽然源码的版本是JDK6,但是个人觉得学习这个版本的源码对于理解数据结构非常有帮助,因为String就是一个数据结构,它是char []的封装,实现了很多对char []的操作 第一部分:String源码解析 (1)String实现了CharSequence接口,这个接…
1.String 1.1类的定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence String类在定义时候使用final关键字进行修饰,限制了这个类无法被继承,里面的方法也无法被重写. 同时它还实现了Serializable接口.Comparable接口,以及CharSequence接口三个接口: Serializable:序列化接口,如果允许对象被序列化需要…
String类下的compareTo(String otherString)方法的源码解析 一. 前言 近日研究了一下String类的一些方法, 通过查看源码, 对一些常用的方法也有了更透彻的认识, 也让我更加理解了设计者的算法思想. 我也推荐大家多读读源码, 我相信大家也会有意想不到的收获. 二. 实战 今天我分析的是String类的compareTo(String otherString)方法, 以下是我个人的分析观点, 如有哪里分析不到位的地方, 欢迎大家指出, 相互学习, 共同进步 !…
利用反编译具体看看"+"的过程 1 public class Test 2 { 3 public static void main(String[] args) 4 { 5 int i=10; 6 String s="abc"; 7 System.out.println (s+i); 8 } 9 } 可以看到的确是创建了StringBuilder类,然后调用了两次append方法,并且调用了toString方法. 查看AbstractStringBuilder源码可…
>>String/StringBuffer/StringBuilder的异同 (1)相同点观察源码会发现,三个类都是被final修饰的,是不可被继承的.(2)不同点String的对象是不可变的:而StringBuilder和StringBuffer是可变的查看源码可以发现,StringBuffer的实现都添加了Synchronized同步,因此StringBuffer是线程安全的,而StringBuilder不是线程安全的String中的offset,value,count都是被final修饰…
序 好长时间没有认真写博客了,过去的一年挺忙的.负责过数据库.线上运维环境.写代码.Code review等等东西挺多. 学习了不少多方面的东西,不过还是需要回归实际.加强内功,方能扛鼎. 去年学习Mysql列举了大纲,书写了一部分.后来进入到工作状态,就没有继续书写.当然其实没有书写的内容部分已经总结到了公司内部的wiki中,或者在工作过程中大半也应用过,也懒得书写下来了.看什么时候又有心情,重新回顾总结一下吧. 下一步的学习计划 数据结构.算法.源代码解读.多线程(哎,学无止境) 为什么先说…
首先看一下他们的继承关系   这个两个对象都继承了AbstractStringBuilder抽象类.   1.他们的实现方式都一样的,唯一区别的StringBuffer在多线程的时候是保证了数据安全,每个方法都加上synchronize关键字,让线程同步.   2.从初始化开始看StringBuffer 有三个构造函数. (1) 第一个是无参的构造函数 ,默认调用AbstractStringBuilder的构造函数,将一个大小为16长度的char数组赋值给父类的value值. (2)第二个是in…
concurrentHashMap(基于jdk1.8) 类注释 所有的操作都是线程安全的,我们在使用时无需进行加锁. 多个线程同时进行put.remove等操作时并不会阻塞,可以同时进行,而HashTable在操作时会锁住整个Map. 在迭代过程中,即使Map及结构被修改,也不会抛出ConcurrentModificationException . 除了数组+链表+红黑树的基本结构外,新增了转移节点,是为了保证扩容时的线程安全的节点. 提供了很多的Stream方法,比如:foreach.sear…
每个String对象在创建的时候都构造了一个char类型的final声明的不可替换数组,数组中的每一个元素即字符串对应的每一个字符如图: String的equals()在比较的时候会进行两步比较: 1.比较存储的地址是否相同: 2.比较字符串的内容是否相同,也就是比较每个char是否相同. 代码如下: public boolean equals( Object anObject // 传入比较的字符串 ) { // 先比较对象地址是否相等-------------------------- if…
在spring2.5版本提供了注解的依赖注入功能,可以减少对xml配置. 主要使用的是 AnnotationConfigApplicationContext: 一个注解配置上下文 AutowiredAnnotationBeanPostProcessor: spring提供的用于这一目的的BeanPostProcessor实现,用来检查当前对象是否有@Autowired标注的依赖注入. 项目中除了使用@Autowired之外,还可以选择JSR250的一些注解例如@Resource大致和@Autow…