String a=new String("abc") 表示创建一个字符串对象,该对象内存分配在堆中
String a="abc" 在字符串缓冲池中寻找已经存在的abc字符串,未找到时在字符串缓冲池中创建一个abc字符串
这2个使用==比较时是false
因为一个地址在堆中,一个地址在字符串缓冲池中
String a="abc";
在字符串缓冲池中未找到abc字符串,在字符串缓冲池中创建一个abc字符串
String b="abc";
在字符串缓冲池中找到abc字符串(上面这行代码创建了一个),这时直接引用,所以这里的a和b地址是完全一样的
依旧不建议使用a==b 因为在复杂的代码中根本无从得知2个地址是否会一样