1.首先应该知道的是:String是一个类,不属于基本类型,而是引用类型。
2.创建String对象的三种方式的比较:
第一种是先去String pool检查是否存在"abc"常量,具体比较使用equals()方法,如果没有,则在String pool 中添加"abc",然后返回一个引用(地址)赋给
i;如果有,则直接返回一个引用给i,无须在String pool 中添加对象。
第二种也是先去String pool 中查看是否存在该String对象,如果没有,也在pool中创建该字符串对象,然后在堆中分配空间存储字符串,并把堆中的地址返回给
n;如果存在,则直接在堆中分配空间用来存储,同样的返回该对象的地址。所以i==n为假。
第三种和 String i = "abc"有同样的效果,因为"ab"和"c"是常量,所以在编译时期就能够确定m也是常量,所以i和m指向的都是String pool中的对象"abc",
所以i==m为真。