- 不变模式的好处:一个对象需要被多线程共享并频繁访问时,可以保证数据的一致性
- String对象创建后,会在字符常量池中进行缓存,下次创建同样的对象,直接返回缓存的引用
- String为什么不可变的
- private final char value[];
- 不可变指的是内容不可变
String str1 = new String("abc");
String str2 = new String("ABC");
str1 = str2;
System.out.println(str1);//输出ABC
String str = new String("abc");
创建了几个对象?
三个,str 常量池中的"abc",堆中的"abc"(new出来的)- 字符串的反转,StringBuffer/StringBuilder的reverse()
- StringBuilder是线程不安全,StringBuffer是线程安全,StringBuilder比StringBuffer性能高15%~20%, 却要冒着线程不安全的风险,不划算
- 数组.length 字符串.length()
- String常用方法
- indexOf(char char);
- charAt(int index);
- subString(int begin,int end);
- length();
- replace();
- split(char char);
- trim();
- getBytes();
- toLowerCase();
- toUpperCase();
- 在使用HashMap的时候,用String来做key好处?
HashMap内部实现是通过key的hashcode来确定value的存储位置,因为字符串是不可变对象,其hashcode经过一次计算便确定下来不再改变,相比于其他对象更快 - AbstractStringBuilder是StringBuilder和StringBuffer的公共父类定义了一系列