7个回答
展开全部
更多追问追答
追问
e那个也是存在于常量池里的吧,就跟a一样了
追答
jvm堆存对象,栈存变量,另外还有个方法区,所以你们说的常量池是在哪块内存里?(/哭
展开全部
字符串不能用 "==" 判断, 要用 a.equals(c) 来判断, 如果是 "ab" + "c"的话, 由于是常量间运算, 所以会从常量池中直接寻找"abc", 有的话, 直接引用其地址, 没有的话新建一个.
但此处 b 是一个对象, b + 字符串是对象间运算, 是在内存中, 而不是常量池里 "abc" 的引用, 所以不相等!
但此处 b 是一个对象, b + 字符串是对象间运算, 是在内存中, 而不是常量池里 "abc" 的引用, 所以不相等!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-10-21
展开全部
因为c是通过字符串引用+字符串常亮的方法连接产生的,那么c就是独立的新开辟的内存地址,所以==结果为false,当且仅当,==两端的字符串都是来自字符串常量池的时候,才可以用==得到true的结果
String a = "ABC";
String b = "AB";
String c = b + "C"; // C来自常量池,"AB"来自引用b
String d = b.concat("C"); // C来自常量池,"AB"来自引用d
String e = "AB" + "C"; // AB和C都来自常量池
System.out.println(a == c); // false
System.out.println(a == d); // false
System.out.println(a == e); // true
String a = "ABC";
String b = "AB";
String c = b + "C"; // C来自常量池,"AB"来自引用b
String d = b.concat("C"); // C来自常量池,"AB"来自引用d
String e = "AB" + "C"; // AB和C都来自常量池
System.out.println(a == c); // false
System.out.println(a == d); // false
System.out.println(a == e); // true
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我之前写的笔记,有很详细的说明= =|||
只说你这个问题:
==是比较内存地址, .equal是比较数值。
java中字符串变量的拼接本质是新建了一个String,所以地址不同了。
另外如果你String c = "AB" + "C";
那么就是true了,因为在编译的时候常量拼接会直接拼好然后才运行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在实际运算中,a==c也有可能出现相等的时候,但是对于字符串的比较,一般都要用equals来比较,因为==比较的是地址,而equals比较的才是内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询