qq_45910459
qq_45910459
2021-07-22 23:00
采纳率: 0%
浏览 29

关于String类的赋值

String str =new String("abc");
String str1 =new String(str);
System.out.print(str.equal(abc));
结果为://true
难道new String(str)赋值给str1的是内容?而不是str引用对象(new String("abc"); )的地址值吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • technologist_32
    CSDN专家-Time 2021-07-22 23:06

    equals是值比较。所以无所谓地址。

    点赞 1 评论
  • technologist_28
    CSDN专家-微编程 2021-07-22 23:19

    Java运行环境有一个字符串池,由String类维护
    执行语句String str = new String("abc");时。不管字符串池中是否存在字符串“abc”,直接新建一个字符串“abc”,(注意,新建的字符串“abc”不是在字符串池中), 然后将其赋给str
    new 创建字符串时,首先查看池中是否有相同的字符串,如果有则拷贝一份放到堆中,然后返回堆中的地址;如果池中没有则在堆中创建一份,然后返回堆中的地址

    所以执行String str1 =new String(str); str在堆中指向串池的“abc”,等价于String str1 =new String(“abc”); 这个时候创建对象,串池中已经有了“abc”,所以只需要返回对中的地址,str和str1的地址,指向都一样,所以使用equals才会为true

    点赞 1 评论
  • hsq1011
    hsq1011 2021-07-22 23:08

    JVM的内部机制,相同内容的字符串,都是引用同一个地址,返回true很正常啊

    点赞 评论
  • Bruce_Zhang0828
    搬砖的孟达 2021-07-23 07:57

    string的eq比较就是单纯比较值。你看一下String的eq源码,就遍历字节数组比较,不一样就直接返回false。

    点赞 评论
  • zzl131415
    maker&sky 2021-07-23 10:08

    String类中重写了equals方法,并不是类似正常对象一样比较的地址

    点赞 评论
  • l9528
    l9528 2021-07-24 18:35

    img

    点赞 评论

相关推荐