java中关于String的一个小细节

我们知道,String是不可变的字符串,可以直接用字面量赋值。

String str = "ABCD";

也可以调用构造器创建对象

String str1 = new String("ABCD");

那么这两种方式有什么区别呢?

Object类中有equals()方法,代码如下:


简单粗暴的用==运算符,比较两个对象的hashcode(内存地址)是否相等。

String类中覆写了equals方法,我们很明显的看出来,str和str1是“相等”的,更严格来讲,是内容的相等,而不是地址的相等。

所以str == str1;//false

str.equals(str1);//true

还有,String str = "ABCD";

最多创建一个对象,存放在常量池中,如果常量池中已经有该字面量了,就不会在创建。

String str1 = new String("ABCD");

new 肯定会在堆内存分配空间创建对象,所以至多创建两个对象。


你可能感兴趣的:(java中关于String的一个小细节)