------- android培训、java培训、期待与您交流! ----------
在开发中我们经常使用到字符串,对字符串的深入理解和熟练操作对程序开发非常重要,这三个类都位于java.lang包中,不用导入包,都被final修饰,不能被继承。
(1).字符串是常量,一旦创建,其内容和长度是不可改变的,如果需要对一个字符串进行修改,则只能创建新的字符串。
class Test{
public static void main(String[] args) {
String s="abc"; //s是一个类类型变量,”abc”是一个对象
/*s="nn";
System.out.println(s);
//输出nn,s的地址改变了,”abc”仍然存在没有改变
*/
String s1=new String("abc");
String s2="abc";
//s1与s2有什么区别
//s2在内存中有一个对象,s1在内存中有两个对象
System.out.println(s==s2);
//==比较的是两个对象的地址值
System.out.println(s==s1);
//String类中复写了Object类中的equals方法,用于判断字符串的内容是否相同
System.out.println(s.equals(s1));
}
}
(2).StringBuffer和StirngBuilder类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer和StirngBuilder对象
其中StringBuffer是线程安全的,StringBuilder是线程不安全的但比StringBuffer快
(3)一道小题:
写出以下代码执行结果,分析为什么?
public class Test {
publicstatic void main(String[] args) {
Strings = "abc";
s.substring(1);
s.replace("bc","xyz");
System.out.println(s);
String value = new String ("abc");
System.out.println(s == value);
}
}
执行结果:abc
false
分析:字符串是常量,一旦创建其内容和长度是不可改变的
s.substring(1);返回了一个新的字符串"bc",s没有改变
s.replace("bc","xyz");返回了一个新的字符串"axyz",s没有改变
输出s仍为abc
String value = new String ("abc");创建了一个新的字符串,s和value是两个不同的对象,s==value比较的是这两个字符串对象的地址值,所以s==value为false
(4) /*
* 看程序写结果。
*
* 变量相加,先造一个字符串,在比较。
* 常量相加,先加,找,比较,最后造。
*/
publicclass StringDemo3 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2);//false
System.out.println(s3 =="hello" + "world");// true
}
}