一,字符串一旦创建不可改变。
二,为了提升字符串的访问效率,在程序中使用了“缓存”技术。所有在Java中用“双引号”括起来的字符串都会在“字符串常量池”中创建一份。字符串常量池在方法区中被存储。
三,在程序的执行过程中,如果程序用到某个字符串,例如“abc”,那么程序会在字符串常量池中去搜索该字符串,如果没有找到则在字符串常量池中新建一个“abc”字符串,如果找到就直接拿过来用。(字符串常量池是一个缓存区,为了提高访问字符串的效率)
四,Java中引用类型之间比较如果使用“==”,是在比较两个引用的内存地址是否一致
五,String s1 = “ abc ” ;只会在字符串常量池中创建一个“abc”字符串对象
String s2 = new String(”hello“);不仅会在字符串常量池中创建一个”hello“字符串对象,并且会在堆内存中创建一个字符串对象。第二种方式比较浪费内存,常用的是第一种方式
注:使用String时,不建议使用new关键字,因为使用new会创建两个对象。
六,使用字符串的时候我们应该注意的问题:
尽量不要做字符串频繁的拼接操作。因为字符串一旦创建,不可改变,只要频繁拼接,就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题
七,字符串的6种创建方式
1,String s1 = " abc " ;
2, String s2 = new String (" abc ") ;
3.bytes[ ] bytes = {97,98,99};
String s3 = new String (bytes) ;
4.String s4 = new String (bytes ,1 ,2) ;
5. char [ ] c1 = {"我","是",”中“,”国“,”人“};
String s5 = new String (c1) ;
6.String s6 = new String (c1,1,2) ;