03 字符串--基础
?
1.String s = new String("abc");//此时内存有两个对象:StringPool里"abc",堆空间:new String("abc")
? ?String s1 = "abc";//因StringPool里已经有“abc”对象,所以不会再产生,此时内存有两个对象
? ?String s2 = new String("abc");//堆空间会新增一个对象,此时内存有3个对象
?
?
2.System.out.println(s == s1);//==比较的是两个对象的内存地址 false
? ?System.out.println(s == s2);//false
? ?System.out.println(s1 == s2);//-------doc 1//false
?
3.//s.intern(),首先查看StringPool里是不是有一个和s内容相等的字符串,如果有,则返回StrigPool里的这个字符串
? ?//如果没有,则将字符串S添加到StringPool里,并返回一个对S的引用
? ?//s.intern()返回的永远是StringPool里的字符串
? ?System.out.println(s == s.intern());//false
? ?System.out.println(s1 == s1.intern());//true
? ?System.out.println(s2 == s2.intern());//false---doc 2
? ?String sItern = "ok";
? ?System.out.println(sItern == sItern.intern());//true
?
4.String hello = "hello";
? ?String hel = "hel";
? ? String lo = "lo";
? ?//两个字符串进行加号连接时,连接完后,首先会到StringPool里查看有没有和自己内容相等的字符串
? ?//如果有,如果有则返回StringPool里的字符串,没有,则将自己添加进StringPool,并返回对自己引用
? ?//StringPool(DataSegment存储空间)里永远只有一个内容相等的字符串
? ?System.out.println(hello == "hel"+"lo");//true
? ? //"hel"+lo,+号连接时如果其中有一个不是字面的字符串常量,则会在堆里产生一个对象
? ? System.out.println(hello == "hel"+lo);//false
? ?System.out.println("hel"+lo);
?