笔者在之前的面试被询问到
String a = "abc";
String b = "abc";
b = new String ("abc");
a==b吗
答案是false,当时对这知识点有一些盲区,所以作一下总结。
首先,要知道 ==比较的是什么?equals比较的是什么?
==:
比较的是堆内存中的对象的内容在栈中的地址。内存地址。
例如:
int e = 1;
double f = 1;
System.out.println(e==f);
输出为true,为什么因为 e,f都指向了1这个地址。
equals:
比较的是内容。
所谓内容最直接就是值,就看他一不一样。
例如
String a = new String("abc");
String b = "abc";
System.out.println(a.equals(b));
输出为true,因为内容都为abc。
切记equal是string比较,且已知的在前,未知的在后,都知道随意。
回归话题
String 和 new String
先说String 可能创建一个对象,也可能不创建对象。
为何,String a = “abc”,如果“abc”这个字符串在String池中不存在,那么就会创建对象一个String a = “abc” 的对象。然后把a指向内存地址。如果“abc”这个字符串在String池中存在,则不创建对象,直接指向内存地址
new String 至少创建一个,也可能两个。
如果 String a = new String(“abc”)用到了new,肯定会在堆中创建一个对象,value值就是,同上解释。
所以String == new String 为false
是因为内存地址不同。