String类型的字符串内存 String a1="ab"; String a2="ab"; String a3=new String("ab"); //虽然三个引用中保存的字符串都是"ab",但是a1和a2通过==比较会发现是true,而a3保存的哈希值却与a1、a2不同。这是因为java中String类型的字符串都是默认不可改变的,而且都是保存在堆内存中的。为了节省内存空间,通过直接赋值的相同的字符串类型都是同一个内存地址内的数据,所以哈希值相同。通过new出来的String类型都是重新开辟了空间。