问题描述
- java 中 String 类连接问题
-
String str1 = "aa" ; String str2 = "bb" ; String str3 = "aa" + "bb" ; String str4 = str1 + str2 ; boolean b =(str3 == str4); System.out.println(b); 这里b为什么是false , 有那个大侠能否帮忙回答下?
解决方案
编译的时候,aa,bb,会存在常量池里面,同时常量的运算结果也会放在常量池里面,如aa+bb就会在常量池里面存一个aabb,而str1+str2的运算不会变成常量池里引用。如图所示,也可以自己使用javap -verbose 命令查看
解决方案二:
(str3 == str4)比的是放置该字符串的地址,所以不一样。
要用equals
解决方案三:
str1和str2都是指向常量池中的对象,换句话说就是“aa”,"bb"在栈内存中存在的,str3是是两个常量之和,它会在栈中创建一个对象"aabb",然后将str3的引用指向它,这也就是说str3引用的对象也是在栈内存中存在的!而str1 + str2虽然内容也是“aabb”,但是它将在堆里面生成一个"aabb"对象,并返回这个对象,所以str3是在栈内存中,str4是在堆内存中
解决方案四:
Java中String类型不能使用双等号比较是否相等,要使用String.Equals
解决方案五:
Java的String类的内存分配问题
Java中String问题
java中String问题
解决方案六:
字符串使用equals,因为==比较的是内存地址,
解决方案七:
比较两个对象值是否相等要用equals(),==比较的是对象的内存地址
解决方案八:
(str3 == str4)比的是放置该字符串的地址,返回false。
要用equals
解决方案九:
lplj717 正解。
关于java中 == 和 equals 的区别:http://blog.csdn.net/zhaizu/article/details/38556241
解决方案十:
String str1 = "aa" ;
String str2 = "bb" ;
String str3 = "aa" + "bb" ; //在内存中分配一个地址
String str4 = str1 + str2 ; //在内存中又分配一个地址
boolean b =(str3 == str4); // ==是判断两个变量的在内存中的地址是否一样,很显然不一样,返回false,如果想判断两个变量在内存中地址指向的值是否相等,可以使用equals
System.out.println(b);