读书人

03 字符串-基础

发布时间: 2012-11-07 09:56:10 作者: rapoo

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);

?

读书人网 >编程

热点推荐