Java中直接赋值和new有何不同?

    xiaoxiao2021-03-25  95

    在 Java 开发中, 下面的代码

      String a ="abc";   String b = new String("abc");

      System.out.println(a==c);

      这样打印出来的结果是"false "

     

      这是为什么呢。

     java  对对象的管理是维护一张 hashcode  内存表的。

     但 第一行 String a = "abc"  时, java   虚拟机会先查看 栈内存是否

    存在着一样内容的  变量, 如 果没有, 则在栈内存中开辟一个临时的栈内存, 用来

    存储  a  的内存。   如果存在同样的内容, 则虚拟机开辟一个b 变量并将 b  的引用指向 a

    所以我们用  System.out.println(a==c);  实际是比较其引用地址是否一样的。

    第二句  String b = new String("abc");  则是在 堆内存中开辟存储空间。

    用 new 出来的空间, 交由虚拟机 动态回收.

    因此这里的   比较引用就是 false 的。

    内容的比较可以用  equals() 函数.

    转载请注明原文地址: https://ju.6miu.com/read-25506.html

    最新回复(0)