java判断字符串,为什么用"=="做不了判断,而要用equal()

1.字符串""与空对象NULL不是一个意思.字符串""是一个存在的对象,只不过对象特殊在于它代表了一个空的字符串.空对象是不存在的对象.
2.String类重载了equals方法,equals方法比较字符串是否完全匹配,所以
String s="a";
boolean b=(s.equals("a"));
则得到的b为true,而==则是比较左右两边的对象是否指向内存的同一位置,事实上可以认为是比较HashCode(哈希码)是否相等,如:
String a="john";
String b=a;
则"a==b",但如果:
String a="john";
boolean b=(a=="john");
则b为false!因为a虽然是"john",但在第二句中的"john"字符串是一个新创建的匿名String类对象!显然新建的对象与原来的对象在内存中的地址并不相同.
HashCode能证明这个问题.

你可能感兴趣的:(java判断字符串,为什么用"=="做不了判断,而要用equal())