JavaSE equlas和==的区别,javaseequlas区别
分享于 点击 37426 次 点评:248
JavaSE equlas和==的区别,javaseequlas区别
Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。所以我们不能单纯的说equals到底比较的是什么。你想知道一个类的equals方法是什么意思就是要去看定义。
Object类中默认的equals方法实现如下:
public boolean equals(Object obj) {
return (this == obj);
}
自定义的类是继承于object,而object中的equals就是用==来实现的,如果没有重写equals方法,那么其equals操作也是与Object类一样,仅仅是直接调用==操作1.当==来判断基本类型变量时,且都是数值类型(不一定需要数据类型严格相同),则只要两个变量的值相等,就返回true
当==来判断引用类型变量时,只有他们都指向同一个对象时,==判断才为true。(String、对象、数组都是引用类型变量)
2.equals()的返回结果依赖于具体业务实现。
比如String类则覆写了这个方法,直观的讲就是比较字符是不是都相同。也就是对字符串的内容进行比较
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
Q:下面的代码片段的输出是什么?
Object s1 = new String("Hello");
Object s2 = new String("Hello");
if(s1 == s2) {
System.out.println("s1 and s2 are ==");
} if (s1.equals(s2)) {
System.out.println("s1 and s2 are equals()");
}
A:输出 s1 and s2 are equals()前者比较引用,后者则比较对象中真正的值。
Q:下面的代码片段的输出是什么?
Object s1 = "Hello";
Object s2 = "Hello";
if(s1 == s2) {
System.out.println("s1 and s2 are ==");
} if (s1.equals(s2)) {
System.out.println("s1 and s2 are equals()");
}
A:输出s1 and s2 are ==
s1 and s2 are equals()
总结:
1.通俗的来说,在String类中,==是同一个人才返回true,equlas是一对双胞胎比较也是返回true。
相关文章
- 暂无相关文章
用户点评