String中字符串==分析

Posted liuligang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String中字符串==分析相关的知识,希望对你有一定的参考价值。

String中字符串==分析

new String

new String都是在堆上创建字符串对象。
技术图片

intern()

调用intern()方法时,编译器会将字符串添加到常量池中(StringTable维护),并返回指向该常量的引用。
技术图片

String str2 = new String("str")+new String("01");
str2.intern(); //将常量池中的引用地址返回给str2
String str1 = "str01";
System.out.println(str2==str1);  //返回为true

String str2 = new String("str")+new String("01");
String str1 = "str01";
str2.intern(); //可以这里理解,当字符串常量池中已经有了str01字符串,那么此条没有做什么操作
System.out.println(str2==str1);  //返回false

通过字面量赋值

如:String str = "twn";时,会先在常量池中查找是否存在相同的字符串,若存在,则将栈中的引用直接指向该字符串;若不存在,则在常量池中生成一个字符串,再将栈中的引用指向该字符串。
技术图片

常量字符串 “+”

常量字符串的 “+”操作,编译阶段直接会合成为一个字符串。如string str=”JA”+”VA”,在编译阶段会直接合并成语句String str=”JAVA”,于是会去常量池中查找是否存在”JAVA”,从而进行创建或引用。

对于final字段

对于final字段,编译期直接进行了常量替换(而对于非final字段则是在运行期进行赋值处理的)。
final String str1=”ja”;
final String str2=”va”;
String str3=str1+str2;
在编译时,直接替换成了String str3=”ja”+”va”,根据上面的规则,再次替换成String str3=”JAVA”

变量和常量字符串拼接

常量字符串和变量拼接时(如:String str3=baseStr + “01”;)会调用stringBuilder.append()在堆上创建新的对象。

参考博客

几张图轻松理解String.intern():https://blog.csdn.net/soonfly/article/details/70147205

以上是关于String中字符串==分析的主要内容,如果未能解决你的问题,请参考以下文章

PHP 代码片段

基于String Array项,向下一个片段显示相同的项

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

方法与对象内存分析

如何将代码片段存储在 mongodb 中?