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

 

你可能感兴趣的:(字符串)