三.String类型有什么特点?
1. 两种实例化方式:
-
String可以采用直接赋值的形式进行操作,这一点像基本数据类型的赋值操作一样。
范例:String str = “hello”; //第一种
-
String是一个类,所以可以new一个对象
范例:String str = new String(“hello”);//第二种
2. 字符串比较:
- 使用"=="比较字符串
String str1 = "hello" ;
String str2 = new String("hello");
System.out.println(str1 == str2) ;
输出:false
分析:因为str1和str2保存在栈内存中,分别存放了两个对象所保存的内存地址的数值,因此不相等。这种比较属于地址数值比较,并没有比较对象的内容。
- 使用equals比较字符串
String str1 = "hello" ;
String str2 = new String("hello");
System.out.println(str1.equals(str2)) ;
输出:true
分析:使用equals方法,不管是何种String实例化方式都将比较对象的内容,因为在String中将equals方法覆盖,用于比较内容的差异。
3. String的内容:
- String对象是不可变的,在String类中每一个看起来会修改String对象内容的方法,实质都是创建了一个全新的String对象。
四. String什么时候进行值比较,什么时候进行引用比较?
stringA.equals(stringB);进行值比较
stringA==stringB;进行引用比较
五.String与StringBuffer的区别是什么?如何互相转换?
区别:
- StringBuffer对象的值是可变的,对字符串的增加、插入、修改、删除等操作比String高效(不需多次创建新的对象)
- String对象是不可变的,在String类中每一个看起来会修改String对象内容的方法,实质都是创建了一个全新的String对象。
转换方法:
示例1:
String s = “a” + “b” ;
String st = new StringBuffer().append(“a” ).append(“b” ).toString();
toString()方法专属于StringBuffer
示例2:
String s = “hello”;
StringBuffer sb = new StringBuffer(s);
String a = new String(sb);