首先给你个提示,String a = new String("aaa");String b = new String("aaa");也可以用== 比较,但是比较结果是 falseequals 是比较hashCode值==是比较内存地址值String a="aaa";String b="aaa";你认为创建了几个对象 ,是1个对象。a b都是指向一个地址的指针String a = new String("aaa");String b = new String("aaa");创建了2个对象在堆里。 来看下结果:public class Main {static public void main(String[] fff){ Object a="aaa"; Object b="aaa";Object c=new String("aaa"); Object d=new String("aaa");System.out.println(a==b); System.out.println(c==d); System.out.println(a==d); System.out.println(""+a.equals(b)); System.out.println(""+c.equals(d)); System.out.println(""+a.equals(d));System.out.println(a.hashCode()); System.out.println(b.hashCode()); System.out.println(c.hashCode()); System.out.println(d.hashCode());}}truefalsefalse true true true96321963219632196321