最近在看java,重新思考了一些问题,做一下笔记

String、StringBuffer和StringBuilder的关系

这个最简单的回答就是,String只读不可变,StringBuffer和StringBuilder是可读可写的,前者线程安全,后者非线程安全(这里吐槽一下程序员思维,非线程安全这个说法就像是 !=或者**not **,但是读起来难过,我还是比较喜欢线程不安全这个说法)。

在String.Class中我们可以看出,String就是一个byte数组(我一直以为是char列表的-_-),这个字符数组被限定了final,final对于类不可被继承,对于变量不可更改。

private final byte[] value;

再说一下StringBuffer和StringBuilder,两者都是extends AbstractStringBuilder,说明这两个是亲戚。

length、length()和size()

有次发现有些时候length有括号有时有有时没有,这个困惑就一直在,这次查了一下记录下来。

. .
length 数组
length() 字符串
size() 集合

可以这么记忆:数组的长度是一个属性,也就是说内存中有一个地方存着数组的长度,所以数组不加括号;字符串看上文就应该知道是byte数组,所以用方法获取这个数组的长度,既然是方法了,那就加括号;size就记忆一下

关于多线程

  1. 继承Thread、重写run方法
  2. 实现Runable借口,重写run方法

详细参看java线程笔记