"=="在java中是比较引用的,而equals是比较String的内容的
-
关于第一个true:java首先会在缓冲区查找是否有"helloWorld"这个常量对象,如果有的话就将其赋值给b,如果没有就创建一个然后赋值给b,因为a创建了"helloWorld",所以在赋值给b的时候在缓冲区找到了"helloWorld",因此a和b其实是指向同一地址的
-
关于第三个false,new的方式会在内存中直接开辟一个空间存储一个"String",因此c和d分别有自己的地址
- String的equals执行步骤:
step 1:判断是否是同一引用
step 2:判断是否是String类型
step 3:判断字符串长度是否相等
step 4:逐个字符比较两个字符串
ps:String类定义了成员变量private final char value[],用来接收字符串,关于各种构造,详见源码