java 判断两个字符串相等问题

发布于 2022-09-11 23:00:16 字数 339 浏览 19 评论 0

请问,通过如下两种不同的方法定义的内容相同的字符串使用==判断结果为何不同(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ゞ记忆︶ㄣ 2022-09-18 23:00:16

String b = "123";创建了一个值为123的字符串对象, 并将变量b指向123字符串对象所在的地址.
String c = "123";检测到之前的字符串对象123在常量池内, 直接将变量c指向常量池中已有的123的地址.
此时c==btrue, 因为bc都指向同一个常量池内的123地址.

同理
String v = new String("123");新建了两个对象, 一个值为123的字符串对象, 放入常量池内, 另一个对象的值为123, 变量v指向的是后者, 而不是常量池里的123的地址.
String n = new String("123");新建了一个对象, 因为之前常量池里已经有123了, 所以不用再加入.
此时v==nfalse, 因为vn并不是指向常量池里的123, 而是两个不同的对象, 只是值一样.

大概就是这样. 应该.

手心的温暖 2022-09-18 23:00:16

如果 理解了 == 和 equals 之后再看这个问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文