首先明确==和equals的区别,==比较的是两个对象的地址,equals作为Object类的方法,如果没有被重写,那么也是比较的地址。对于字符串来说,在JVM内存中有一个字符串常量池,在创建字符串的时候会判断池中是否已经有了这个字符串,如果有则引用,如果没有则创建,并放入。清除了这个以后,对于String a = new String('a');String b = new String('a'); a==b 输出false的原因自然就清除了。因为a==b比较的是内存地址,而a和b都是创建的不同的对象的引用,所以a==b输出false。这种方式不建议使用,建议使用String a = 'a';可以大大节省创建对象,内存分配和回收带来的性能损耗。