一.equals方法介绍
Object父类中equals方法:
public boolean equals(Object obj) { return (this == obj); }
如果没有进行覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,那么结果必然为false。
String类中的equals方法:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
String类中重写了equals方法,如果两个对象地址不相等,则会先进行对象内容的比较,如果对象内容相同,依旧返回true,否则返回false。
二.String类中的拼接问题
阿里巴巴秋招题目:
private static final String MESSAGE="taobao"; public static void main(String [] args) { String a ="tao"+"bao"; String b="tao"; String c="bao"; System.out.println(a==MESSAGE);//true System.out.println((b+c)==MESSAGE);//false }
解析:
-
1.字符串在java中存储在字符串常量区中
-
2.==判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法 首先判断a==MESSAGE 同一份字符串常量在内存中只有一份,因此是同一地址,返回true,再次比较(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false
最经经历的事情比较多,现在真在慢慢走出来,一切都会变好的,后续将持续更新java技术文章。