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