文章目录
字符串
创建和存储的机制
String 的实现采用了Flyweight 的设计模式
当执行 String = "abc"
时,在字符串常量池查找字符是否已经存在,
若不存在则创建这个字符串常量,并返回引用;
若存在则直接返回引用。
“==”、equals和hashCode有什么区别
- “==” :比较两个基本类型的数据或两个引用变量(是否指向同一堆内存)是否相同
- equals是Object类提供的方法,默认方法与"=="效果一致,可重写
- hashCode()也是Object类的方法,默认方法返回的是对象在内存的地址所转换成的int值(堆内存)
- equals 与 hashCode方法必须同时重写
String、StringBuffer、StringBuilder和StringTokenizer
- String类是不可变类,即每次修改都会创建新的对象,适合存放不频繁修改的变量。
- StringBuffer类属于可变类,适合需要频繁修改字符串的场景。
- String字符串进行修改操作的原理:
- 首先用原来的字符串创建一个StringBuilder对象
- 再调用append( )方法
- 最后调用toString()方法返回字符串。
- StringBuffer是线程安全的,StringBuilder不是线程安全但单线程效率更高。
- StringTokenzier是用来分割字符串的工具类。
数组
数组有自己的属性(如length),和方法(如clone),也可以用instanceof来判断,因此从这方面看,数组也是对象。
- 声明
type arrayName[ ] 或 type[ ] arrayName
type既可以是基本类型,也可以是类 - 初始化长度
arrayName = new type[arraySize]
arrayName = new type[ ] { e1, e2, e3 … } - 二维数组的声明
type arrayName[ ][ ];
type [ ][ ] arrayName;
type[ ] arrayName[ ];
length属性与length()方法
- length属性是数组的属性,存放数组的长度
- length( ) 方法是String的方法,来获取字符串的长度