/**
* 1、字符串已经创建便不可修改。
* 2、提升字符串的访问效率,在程序中使用了“缓存”技术
* 所以在java中所有使用“双引号”括起来的字符串都会在“字符串常量池”
* 中创建一份,字符串常量池在方法区中被存储
* 3、在程序执行过程中,如果程序遇到某个字符串,例如“abc”,那么程序会在
* “字符串常量池”中查找,如果没有,则在“字符串常量池”中新建一个“abc”字符串,如果找到
* 就直接拿过来用。(字符串常量池是一个缓存区,为了提高访问程序的访问效率)
* */
public class StringTest {
public static void main(String[] args) {
//穿件一个“abc”字符串对象,该对象的内存地址,让S1变量保存
//s1是一个引用,s1指向“abc”对象
String s1="abc";
//s1是局部变量,s1前边没有final,所以可以重新指向
s1="def";
String s2="Hello";//在字符串常量池新建一个“Hello”对象,该对象不可变
String s3="Hello";//在字符串常量池中直接拿来用
System.out.println(s2==s3);//true
//new 是在堆中开辟空间,“==”比较的是内存地址
//s4和s5开辟了两个不同的内存空间,地址不同
String s4=new String("abc");
String s5=new String("abc");
System.out.println(s4==s5);//false
//以下程序执行以后会在字符串常量池中创建3个字符串对象
//aaa bbb aaabbb
String s6="aaa";
String s7="bbb";
String s8=s6+s7;
String s9="abcd";
String s10=new String("abcd");
//二者的不同在于前着只在字符串常量池值创建“abcd”,new会创建两个对象一个在堆中,一个在字符串常量池中
//第二种方式浪费空间,常用第一中方式
}
}
String类详解
最新推荐文章于 2022-09-25 21:20:47 发布