string那些事

    xiaoxiao2021-03-25  89

    1.

    String s1="abc"; String s2="abc"; System.out.println(s1==s2);注释:在执行过程中,如果程序用到某个字符串,例如,“abc”,程序会在方法区字符串常量池中去搜索该字符串,如果没有找到,就会在字符串常量池中创建一个“abc”字符串,如果找到,就直接拿过来用就可以了。

    字符串常量池是一个缓冲区,为了提高访问字符串的效率。

    2.

    String s3 = new String("abc"); String s4 = new String("abc"); System.out.println(s3==s4);//false注释:使用new关键字则是在堆中开辟空间,所以比较的是内存地址。所以结果是false.

    System.out.println(s3.equals(s4)); 注释:这个结果是true,因为string已经重写了object类的equals方法,比较的不是内存地址,而是实体内容3.问以下这三行代码会在底层创建几个字符串对象?

    String s5 = "aaa"; String s6 = "bbb"; String s7 = s5 + s6;注释:会在字符串常量吃池中创建3个字符串对象"aaa","bbb","aaabbb"

    但是不建议做字符串的拼接,会在字符串常量池中浪费空间

    4.问这两行代码会在底层创建几个对象?

    String s1=new String("abc"); String s2=new String("abc");注释:首先,s1会在方法区的字符串常量池中创建一个“abc”字符串对象,还会在堆中再创建一个“abc”的字符串对象,然后s2在常量池中搜索这个“abc”对象,搜索到了就不在创建了,但是它仍会在堆中创建一个“abc”对象,所以会在底层创建3个对象。(常量池中1个,堆中2个)

    转载请注明原文地址: https://ju.6miu.com/read-18248.html

    最新回复(0)