liu_zihua 2008-11-20 13:11
浏览 170
已采纳

String一个奇怪的地方

      String s1 = "hello";
        String s2 = s1;
        String s3 = "he";
        s3 += "llo";
        
        System.out.println(s1 == s2);
        //为什么不想等?
        System.out.println(s1 == s3);
        System.out.println(s1.equals(s3));
  • 写回答

3条回答 默认 最新

  • bohemia 2008-11-20 15:43
    关注

    让我想起Python中的"一切皆对象";

    想到了C++中的操作符重载;

    你的情况上面的帖子讨论了很多,看了应该很有帮助;

    == 是引用的比较;
    equal 是数值的比较;

    a = "1";
    b = "1";

    a 和 b 同时引用的 "1" ,所以 == 返回true;

    [quote]s3 += "llo"; [/quote]
    应该可以理解为:
    tmp = new String();
    tmp = s3+"llo"; // tmp = "he" + "llo";
    s3 = tmp;
    return s3;
    此时S3引用了JVM创建的新的String对象, 可根据HashCode,显示是不同对象的;
    所以S1.equals(S3) 但 == 并不返回 true

    http://wdmcln.iteye.com/blog/136268 这篇文章也不错;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 chemex:docker安装chemex过程中遇到问题
  • ¥15 关于遇到一个python,django,redis,uwsgi,nginx搭的一个企业微信修改AD密码的平台的问题!
  • ¥15 读取parquet文件某一列的数据但是输出是整个列名和格式
  • ¥15 机动目标 制导律建模问题
  • ¥100 求Java socks 转发实现Demo
  • ¥20 随身WiFi移动网络访问不了
  • ¥50 RAD_XE11.3获取android11手机的IMEI码
  • ¥15 linux的gcc命令报错
  • ¥20 如何再GIS用海岸线建立缓冲区
  • ¥15 codeblock遇到问题了,求帮助😭