1.字符串是常量的,他们一旦被创建是不能被改变的
左为栈,右为堆
2.如果对字符串多次拼接,不建议用String类,而是用StringBuffer类
public final class string //final 不可继承
public final char value [];//是引用不能改变,不是值不能改变;
String str = new String(“hello”);创建了多少个对象?
String str = new String("hello");
如果之前不存在hello,先在常量池中创建一个hello字符串,则产生了2个对象+1个引用
如果存在,则产生一个对象(堆中)+1个引用
初始:常量池为空
- String str1 = new String (“a”+“b”);产生了多少对象?(暂时不考虑引用类型)
4个 1个引用
new 在堆中开辟空间产生对象!
- String str2 = new String (“abc”) + “abc”;
产生多少对象?
3个(堆中一个abc,常量池abc和abcabc)
一个引用
字符串,如果直接使用字面量
String str = “abc”,则从常量池中找
如果使用的是new,则从堆中找(而堆中又会从常量池中找,如果从常量池中找不到,则会在常量池中创建,并以弄该常量池中的字符串 --使用常量池中的内存地址)
字符串如果通过new创建,则必然会直接指向堆中的对象
如果new之后,仍然想从常量池中获取,则需要用 inter();
String中的inter()方法可以让引用直接指向常量池