String str =new String("aaaa");
String str1 ="aaaa";
区别:第一个先在方法区的常量池中创建"aaaa",然后在堆内存中开辟空间创建了一个对象,并有新的地址值;第二个直接在方法区的常量池中创建了"aaaa",str1直接指向了该地址值所以str.equals(str1)------true ; str ==str1 -----false
String s1 ="aaa";
String s2 ="bbb"; s3 == s1+s2; -----false
String s3 ="aaabbb"; s3 =="aaa"+"bbb"; -----true
字符串变量相加的过程,是先开辟一个空间,然后将结果赋值进去,
而字符串常量相加的过程是先进行拼接,然后在常量池中寻找,有则指向,无则开辟新的空间 |
|