特点
1、 String类不能被继承
2、 String在java中属于一个类,用来描述字符串常量的类
3、 String类中存储的字符串常量,在初始化后,就不能修改其值。(一旦修改就相当重新创建了一个新的字符串常量对象)
java中的String类中存储的字符串常量(String描述的字符串常量对象),其实不是直接存储堆内存中的,而是存储在常量池中。
常用方法
判断方法:
equals :判断两个字符串是否相等(比较字符串的内容),在比较字符串区分大小写
equalsIngnoreCase:判断两个字符串是否相等。在比较字符串时不区分大小写(忽略大小定)
startsWith:判断字符串是否以什么字符串开头
endsWith:判断字符串是否以什么字符串结尾
isEmpty:判断字符串是否为空(不是空对象,是空字符串)。
可以用length()==0或equals(“”)代替
contains:判断当前字符串中是否含某个字符或字符串
compareTo:比较两个字符串大小。返回值:0、正数、负数
获取方法:
length:获取字符串的长度
charAt:获取指定位置上的字符
indexOf:从前向后获取指定字符或子字符串在字符串中的第一次出现位置
lastIndexOf:从后向前获取指定字符或子字符串在字符串中的第一次出现位置
substring:获取指定位置的子字符串
转换方法:
getBytes:把字符串转换为字节数组
toCharArray:把字符串转换为字符数组
基本数据类型转换为字符串: String类中的静态方法valueOf
最简单的转换字符串方式:基本数据+””
把字节数组转换为字符串:String构造方法
把字符数组转换为字符串:String构造方法 或 String.valueOf()
toLowerCase:把字符串中的字母转换为小写字母
torUpperCase:把字符串中的字母转换为大写字母
切割方法:
split:按照指定的字符串进行切割。返回值为:字符串数组
其它方法:
trim:去除字符串两端的空格 例:“ N BA “ 结果为:” N BA”
replace:按照指定的字符或子字符串对当前字符串的某个字符或子字符串进行替换
例: “cba”.replace(‘c’,’N’) 结果:“Nba”
特殊的应用:可以作为删除使用 “abc”.replace(“b”,””); 结果:“ac”
字符串小练习
结果:
true
true 原因:”a”和”b”都是常量值,而常量值在编译阶段会进行运算,运算结果”ab”
false 原因: 两个变量相加,在运行时JVM会根据两个变量的值,重新创建一个新的字符串对象
false 原因:两个对象的地址不一样
true 原因:变量添加了修饰符final后,变量就变为常量,而常量在编译阶段,会使用常量值代替常量
字符缓冲区
字符串缓冲区有两个:StringBuilder和StringBuffer。其中StringBuffer线程安全。
执行效率:StringBuilder>StringBuffer>String
泛型
泛型(参数化类型):可以理解为是一种约束类型,泛型可以定义在类上、方法上(泛型返回值、泛型参数)、接口上(可以向下传递给实现类)
泛型中的通配符:? 表示任意引用类型
泛型中通配符的限定:
上限: <? extends 父类>
下限: <? super 子类>
泛型的好处:
1、把运行时期发生的异常,转到编译时期变为编译错误处理
2、解决集合中存储数据不安全的问题
3、省略强制类型转换的书写
泛型擦除:
Java编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。泛型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。
类型擦除的主要过程如下:
1).将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
2).移除所有的类型参数。