- Author 杨叔
- java.lang.string;是字符串类型
1.字符串一旦创建不可改变。“abc”字符串一旦创建,不可再改变成“abcd”
2.为了提升字符串的访问效率,在程序中使用了“缓存”技术。所有在Java中所有使用双引号括起来的字符串都会在“字符串常量池”中创建一份。字符串常量池在方法区中被存储
3.在程序执行过程中,如果程序用到某个字符串,如“abc”,那么程序会在字符串常量池中去搜索该字符串,如果没有找到,则在字符串常量池中新建一个“abc”字符串,如果找到就直接拿过来用。(字符串常量池是一个缓存区,为了提高字符串的访问效率)
public class StringTest01 {
public static void main(String[] args) {
//创建一个“abc”字符串对象,该对象的内存地址让s1保存
//s1是一个引用,s1指向abc对象
String s1="abc";
//可以让s1重新指向吗?s1是局部变量,s1前面没有final,所以可以重新指向。
//但是“def”字符串本身不可变
s1="def";
String s2="hello";//在字符串常量池中新建一个“hello”字符串,该对象不可变
String s3="hello";//从字符串常量池中直接拿来用
//下面语句之所以输出true,是因为s2和s3内存地址相同
System.out.println(s2==s3);//true
//所以比较两个字符串是否相等不能用“==”
//从以下程序可以看出,当使用new关键字创建对象时,即使字符串内容相等,也会输出false,因为“==”是用来比较两个引用的内存地址是否相等,而不是字符串内容是否相等。
String s4=new String("abc");
String s5=new String("abc");
System.out.println(s4==s5);//false
//所有比较两个字符串是否一致,必须使用string类提供的equals方法
System.out.println(s4.equals(s5));//true
//以下程序执行结束后会在字符串常量池中创建三个字符串:“aaa”“bbb”“aaabbb”
String s6="aaa";
String s7="bbb";
String s8=s6+s7;
}
}