java中字符串常量_Java基础-Java中字符串常量详解

--------第一个例子---------

String str1 = "a";

String str2= "b";

String str3= "ab";

String str4= str1 +str2;

System.out.println(str3== str4); //输出结果:false

为什么会是false呢?

Java中将类似于"Hello"这样的字符串,Jvm在编译期就能确定其值,所以就直接new String("xxx"),并将其存储于常量池中(包括:char、byte、short、int、long、boolean和String类型),所以上面的str1、str2、str3 指向的均是常量池中对象;

而String str4 = str1 + str2就不同了,+号两边(或任意一边)是变量,Jvm在编译期是无法确定其值的,要等到运行期再进行处理,处理方法为:先用str1在堆内存中new一个StringBuilder,然后append(str2),然后调用toString()将其引用赋值给str4,所上面的str4指向的是堆内存的一个字符串对象,如下图所示:

java中字符串常量_Java基础-Java中字符串常量详解_第1张图片

--------第二个例子---------

String str1 = "a"

你可能感兴趣的:(java中字符串常量)