String字符串关于==的详解

String详解

字符创建方式

字符串创建有两种方式

  • String s = new String("myString");
  • String string2 = "myString";

创建过程解析

方式一创建时,先解析字符串常量"myString",它会在常量池里面的一个字符串常量列表中查找,如果没有找到,在堆里面创建一个包含字符序列(myString)的String对象s1,然后把这个String对象的字符序列和引用作为名值对存放到常量池里面的字符床常量列表中。如下图所示:

接下里就在堆里面再创建一个包含字符序列(myString)的String对象,并让s指向它。
方式2创建时,先解析字符串常量池里面的字符串常量列表,如果找到了就直接包表中对于的对象引用返回。所以string2和s1指向的是堆里的同一个对象。

intern方法

  • 如果这个String对象的字符序列不在字符床常量列表中,那么就会把这个String对象的字符序列和引用以名值对的形式放入列表中,并返回一个指向String对象本身的引用。
  • 如果这个String对象的字符序列在字符串常量列表中,那么就会返回常量列表中相同字符序列对应的对象引用。
        String s3 = new String("gouzi");
        String s4 = "gouzi";
        System.out.println(s3.intern() == s4);

引用地址

引用链接
如有侵权,告之立删。

原文地址:https://www.cnblogs.com/dearcabbage/p/10602767.html