String

作者: X_未知 | 来源:发表于2016-03-02 10:36 被阅读0次

    String

    String s1 = "abc";
    String s2 = "abc";
    String s3 = new String("abc");
    System.out.println(s1 == s2);//true
    System.out.println(s1 == s3);//false
    

    ==比较的是两个对象的引用。s1、s2、s3均为新创建的的String对象,为什么打印出true、false?
    一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,而堆内存中则存放new出来的对象和数组。然而除此之外还有一块区域叫做常量池。
    String s1 = "abc";这样申明的字符串对象的值就是存储在常量池中。
    当创建String s1 = "abc";对象后,"abc"就存储到了常量池(也可叫做字符串池)中,当我们创建引用String s2 = "abc";时,Java底层会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建;如果常量池中没有则创建并添加的池中。

    相关文章

      网友评论

          本文标题:String

          本文链接:https://www.haomeiwen.com/subject/llmdkttx.html