1.String类型有什么特点?
两种实例化方式:
(1)String可以采用直接赋值的形式进行操作,这一点像基本数据类型的赋值操作一样。
String str = "hello"
(2)String是一个类,所以可以new一个对象
String str = new String("hello");
2.String什么时候进行值比较,什么时候进行引用比较?
stringA.equals(stringB);进行值比较
stringA==stringB;进行引用比较
3.String与StringBuffer的区别是什么?如何互相转换?
区别:
(1)StringBuffer对象的值是可变的,对字符串的增加、插入、修改、删除等操作比String高效(不需多次创建新的对象)
(2)String对象是不可变的,在String类中每一个看起来会修改String对象内容的方法,实质都是创建了一个全新的String对象。
转换方法:
String s = “a” + “b” ;
String st = new StringBuffer().append(“a” ).append(“b” ).toString();
toString()方法专属于StringBuffer
String s = “hello”;
StringBuffer sb = new StringBuffer(s);
String a = new String(sb);
4.请简述String, StringBuffer, StringBuilder三者之间的共同点与区别,应该分别在何种场景下使用?
运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
5.为什么不建议在 for循环中使用 “+” 进行字符串拼接?
因为使用“+”进行字符串拼接,操作数为String类,String类是不可变对象,每次使用“+”进行字符串拼接时都会创建新的对象,在for循环中使用“+”拼接字符串会进行大量的创建对象的操作,由此导致程序运行速度缓慢
6. 什么是字符串的编码与解码?请举例说明
编码:将unicode字符集转换为本地字符集的过程
解码:将本地字符集转换为unicode字符集的过程