Java中,关于String类型的变量和常量做“+”运算时发生了什么?


String s1="a"+"bc";
String s2="ab"+"c";
s1==s2的结果是true


String a="a";
String bc ="bc";
String s1="a"+"bc";
String s2=a + bc;
s1==s2的结果就是false

请问对于第㈠和第㈡种情况,在内存中发生了什么.
第一种情况下,常量池是不是创建了a,bc,ab,c和abc五个常量?s1和s2共享了abc这个常量?
第二种情况下,和第一种的不同在哪儿?

小编这里有一份Java学习资料,加我的Java学习群:985331340免费获取。

 

 反编译一下就明了了.

class test  
{
	public static void main (String[] args) throws java.lang.Exception
	{
	    String a="a";
	    String ab="ab";
	    String bc="bc";
	    String c="c";
	    String abc1=a+bc;
	    String abc2=ab+c;
	    System.out.println(abc1==abc2);
	    String abc3="a"+"bc";
//这几行
	    String abc4="ab"+"c";
//都是使用
	    String abc5="a"+"b"+"c";//常量相加的
	    System.out.println(abc3==abc4);
	    System.out.println(abc4==abc5);
	}
}

反编译出来是这个样子

猜你喜欢

转载自blog.csdn.net/qq_43202482/article/details/88382261