Java为String类型提供了缓冲池机制,当使用双引号定义对象时,Java环境首先去字符串缓冲池寻找相同内容的字符串,如果存在就直接拿出来应用,如果不存在则创建一个新的字符串放在缓冲池中。
所以d和c指向了同一个内存地址
而String中new的创建形式,是直接在堆内存中创建对象,在栈内存中创建String类型的变量,这个变量中存储的就是堆内存中对象的地址。总的来说,只要用了new就会创建一个新的对象。一般的话,推荐使用双引号创建字符串,因为采用的是字符串缓冲池机制,效率更高。
equals比较的是值是否相同,而==比较两个对象的引用是否相同。