Java中,那些关于String和字符串常量池你不得不知道的东西

在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true。

String s1 = new String("xyz"); String s2 = "xyz"; System.out.println(s1 == s2); System.out.println(s1.equals(s2));

对于这种题,你总能很快的给出标准答案:==比较的是对象地址,equals方法比较的是真正的字符数组。所以输出的是false和true。

上面的属于最低阶的题目,没有什么难度。

现在这种老套的题目已经慢慢消失了,取而代之的是有一些变形的新题目:

String s1 = "aa"; String s2 = "bb"; String str1 = s1 + s2; String str2 = "aabb"; //输出什么呢??? System.out.println(str1 == str2); final String s3 = "cc"; final String s4 = "dd"; String str3 = s3 + s4; String str4 = "ccdd"; //又输出什么呢??? System.out.println(str3 == str4);

难度提升了一些,但思考一下也不难得出答案是false和true。

今天的文章就是以这几个题目展开的。

String对象的创建

先简单看一下String类的结构:

image-20210122222326753

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfwp.html