String
- String是不变对象,即:内容一旦创建值不可改变,若改变字符串内容必定创建新对象
- String的优化是针对重用性的,频繁修改字符串会创建大量的垃圾对象,导致内存消耗大,运行性能差
- string常用的方法
length(); //返回此字符串的长度
indexOf(); //检索指定字符串在当前字符串中的位置(第一个)
lastIndexOf(); //检索指定字符串在当前字符串中的位置(最后一个)
substring(); //截取当前字符串中指定范围内的字符串(含头不含尾)
trim(); //去除当前字符串中的空白
charAt(); //获取当前字符串中指定位置处的字符
startsWith(); // 判断当前字符串是否是以给定字符串开始
endsWith(); // 判断当前字符串是否是以给定字符串结尾
toUpperCase(); //将字符串中的英文部分转换为全大写
toLowerCase(); //将字符串中的英文部分转换为全小写
valueOf();//将给定内容转换为字符串
String类的特点
使用final修饰,不允许被继承
为什么String这个类要设计为不可变的类呢?
- 不允许扩展
- 为了安全
String类型的字符串有什么特点
- 底层使用char[]数组存储,编码为Unicode(每个字符占两位)
- 字符串对象不可变
- 字符串字面量值默认会存储在常量池(堆的一部分)
常量池
JVM堆字符串的一个优化为常量池,会缓存所有用字面量形式创建的字符串对象,并进行重用
JDK1.7中的常量池在什么地方
堆内存(常量池中存放的都是字面量)
JDK1.7以后为什么常量池要放在堆中呢
- 堆的大小可以灵活配置
- 堆中有GC
- 应用相对灵活
StringBuilder
- Java提供了一个专门负责修改字符串内容的类StringBuilder
- StringBuilder内部维护一个可变的字符串数组,以及提供了方便修改字符串内容的相关方法
- StringBuilder常用方法
append();//追加字符串
insert();//插入字符串
delete();//删除字符串
replace();//替换字符串
reverse();//字符串反转
StringBuffered和StringBuilder方法一样
StringBuilder 线程不安全
StringBuffered 线程安全
String、StringBuilder、StringBuffered三者的区别
- String的长度是不可变的(因为由final修饰)
- StringBuilder和StringBuffered的长度是可变的,如果最后是以String类型输出的话,用toString()转换为String类型
- StringBuilder是非线程安全的,并发处理,性能稍快
StringBuffered是线程安全的,同步处理的,性能稍慢
正则表达式
-
常用方法
matches();//使用给定的正则表达式验证当前字符串的格式
split();//将当前字符串按照满足正则表达式的部分进行拆分
replaceAll();//将当前字符串中满足正则表达式的部分替换为给定内容 -
字符集合
- 预定义字符集
- 数量词
^:代表字符串开始
$:代表字符串结束
Object
-
常用方法
toString();//用于返回对象值得字符串表示
equals();//用于比较两个字符串对象得字符序列是否相等。 -
Object得toString方法是常见得会被子类重写得方法,该方法原始定义返回得字符串是对象得“句柄”,即:地址信息但是实际价值小。该方法我们将来很少会直接调用,都是在调用某个API时被自动调用。
-
对于引用类型而言:
== 的比较是比较两个变量的值,即:地址是否相同,因此 == 的意义是比较两个变量指向的是否为“同一个对象”
equals方法是Object提供的方法,设计意义是比较两个指向的对象“内容是否相同”,但是该方法需要子类重写,否则比较的就是 ==
包装类
-
包装类是用来解决基本类型不能参与面向对象开发的问题,使得基本类型可以以“对象”的形式存在。
-
包装类可以将字符串解析为基本类型,前提是该字符串正确描述了基本类型可以保存的值
-
JDK1.5版本推出了一个新特性:
自动拆装箱,可以让编译器在编译器在编译期间自动将基本类型与引用类型之间互换 -
Integer, Long, Double, Short, Float, Byte, Character, Boolean
-
常用方法:
doubleValue();//以double形式返回指定的数值
intValue();//以int形式返回指定的数值
floatValue();//以floatValue形式返回指定的数值
Integer.parseInt();//用于将字符串转换为int
Double.parseDouble();//将字符串转换为double