10的堆 // equals: // 1、比较的是两个对象的内容是否一样 String s=”abce”是一种非常特殊的形式,和new 有本质的区别... * 这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为”abcd”的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象...,如果没有,则在常量池中新创建一个”abcd”,下一次如果有String * s1 = “abcd”;又会将s1指向”abcd”这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象...String a = new String(“ab”);是在堆里面建立的对象 String,a和”ab” aa=”ab”;是查找栈里有没有”ab”,如果有就用aa引用它,如果没有就把“ab”存进栈 ...而JDK1.7(以及部分其他虚拟机,例如JRockit)的intern()实现不会再复制实例,只是在常量池中记录首次出现的实例引用, 因此intern()返回的引用和有StringBuilder创建的那个字符串实例是同一个