java 判断两个字符串相等问题
请问,通过如下两种不同的方法定义的内容相同的字符串使用==判断结果为何不同(r 和 h 值不相同)?
- 1
String b = "123";
String c = "123";
Boolean r = (c==b);// r 为true
- 2
String v = new String("123");
String n = new String("123");
Boolean h = (v==n); //h 为 false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
String b = "123";
创建了一个值为123
的字符串对象, 并将变量b
指向123
字符串对象所在的地址.String c = "123";
检测到之前的字符串对象123
在常量池内, 直接将变量c
指向常量池中已有的123
的地址.此时
c==b
为true
, 因为b
和c
都指向同一个常量池内的123
地址.同理
String v = new String("123");
新建了两个对象, 一个值为123
的字符串对象, 放入常量池内, 另一个对象的值为123
, 变量v
指向的是后者, 而不是常量池里的123
的地址.String n = new String("123");
新建了一个对象, 因为之前常量池里已经有123
了, 所以不用再加入.此时
v==n
为false
, 因为v
和n
并不是指向常量池里的123
, 而是两个不同的对象, 只是值一样.大概就是这样. 应该.
如果 理解了 == 和 equals 之后再看这个问题。