1.String,StringBuffer,StringBuilder的常用API
public class Text
{
public static void main(String[] args)
{
String s="abcdedcba" ;
System.out.println("字符串的长度为:"+s.length());
System.out.println("字符b第一次出现的位置:"+s.indexOf('b'));
System.out.println("字符b最后一次出现的位置:"+s.lastIndexOf('b'));
}
}
2.String,StringBuffer,StringBuilder三者之间的共同点和区别,应该分别在什么场景下中使用
相同点:
1、内部实现基于字符数组,封装了对字符串处理的各种操作
2、可自动检测数组越界等运行时异常
不同点:
1、String内部实现基于常量字符数组,内容不可变;
StringBuffer、StringBuilder基于普通字符数组,数组大小可根据字符串的实际长度自动扩容,内容可变
2、性能方面,对于字符串的处理,相对来说 StringBuilder >StringBuffer>String
3、StringBuffer线程安全;StringBuilder非线程安全
使用场景:
String:对安全要求更高。
StringBuffer、StringBuilder:对性能要求更高
3.不建议在for循环中使用“+”进行字符串拼接的原因
由于字符串拼接过程中会创建新的对象,所以如果要在一个循环体中进行字符串拼接,就要考虑内存问题和效率问题。
而“+”反编译后的代码,在for循环中,每次都是new了一个StringBuilder,然后再把String转成StringBuilder,再进行append。
而频繁的新建对象当然要耗费很多时间了,不仅仅会耗费时间,频繁的创建对象,还会造成内存资源的浪费。
4.什么是字符串的编码和解码
编码:将Unicode字符集转换为本地字符集(GB2312或GBK)的过程。
解码:将本地字符集转换为Unicode字符集的过程
byte[] getBytes(String charsetName)
String(byte[] bytes, String charsetName)
getBytes()
String(byte[] bytes)