String是引用类型,不过java有字符串常量池机制,声明字符串常量或者字符串常量连接都要用到字符串常量池。如果常量池中有该字符串序列则返回,所以str创建了一个字符串并放入常量池中,str2内的字符序列已在常量池中所以str2直接指向str指向的对象。
而new String()一定会在堆上新创建对象,所以肯定false
例子:
String str="scce"; //创建了一个对象
String str2="scce"; //指向一个对象,不是新建
str==str2返回true //同一个内存地址
String str2=new String("scce"); str==str2返回false //新建了一个对象,内存地址不一样!