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
阅读 3.5k
2 个回答

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, 而是两个不同的对象, 只是值一样.

大概就是这样. 应该.

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题