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

来源:互联网 发布:洛天依软件下载 编辑:程序博客网 时间:2024/05/24 02:48

在 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() 函数.

0 0
原创粉丝点击