String类型是字符串类型。。字符串一旦创建不可以在改变。“abc”字符串对象一旦创建,不可以再改成“abcd”
提升字符串的访问效率:在程序中使用了“缓存”技术。所以在java中所有使用“双引号”括起来的字符串都会在“字符串常量池”中创建一份。字符串常量池在方法区中被存储。
在程序执行过程中,如果用到某个字符串,例如:“abc”那么程序救护在字符串常量池中去搜索该字符串,如果没有找到则在字符串常量池中新建一个"abc"字符串,如果找到就直接拿过来用。(字符串常量池是一个缓存区,为了提高访问字符串的效率)public class StringTest01{
public static void main(String[] args){
//创建一个"abc"字符串对象,该对象的内存地址,让s1变量保存。
//s1是一个引用,s1指向 "abc" 对象.
String s1 = "abc";
//可以让s1重新指向吗?s1是局部变量,s1前边没有final,所以s1可以重新指向。
//但是"def"字符串本身不可变.
s1 = "def";
String s2 = "Hello"; //在字符串常量池中新建一个"Hello"字符串对象,该对象不可变
String s3 = "Hello"; //从字符串常量池中直接拿来用。
System.out.println(s2==s3); //true
//比较两个字符串是否相等,不能用"=="
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
//以下程序执行结束之后,会在字符串常量池中创建3个字符串对象
//"aaa" "bbb" "aaabbb"
String s6 = "aaa";
String s7 = "bbb";
String s8 = s6 + s7;