黑马程序员技术交流社区
标题:
==和equals的区别
[打印本页]
作者:
fyg408224345
时间:
2015-5-20 20:56
标题:
==和equals的区别
学了一段时间,老是不懂==和equals的区别是什么?哪位大神帮帮小弟。谢谢
作者:
姜秋艺
时间:
2015-5-20 21:08
== 比较的是真实地址 equals比较的是内容
作者:
黑马生涯
时间:
2015-5-20 21:08
equals默认比较的是对象是否相等,比较的是地址值。
作者:
L番茄X
时间:
2015-5-20 21:28
一个比较对象,一个比较地址值,谢谢.
作者:
郭.威
时间:
2015-5-20 21:30
==比的是地址值,equals比的是对象
作者:
andre
时间:
2015-5-20 21:42
==可以比较基本数据类型,也可以比较引用类型,比较基本数据类型比的是值,引用类型比较的是地址值
equals只能比较引用数据类型,默认情况下比的是地址值,如果重写equals的话,可以比较值(就像String类的equals就是被重写的,他比较的就是值)
作者:
谢晓明
时间:
2015-5-20 21:50
==比较的是两个变量的值是否相等,如果是基本数据类型,则直接比较两个值是否相等;如果是引用数据类型,则比较的是两个变量的地址值。即==比较的是在栈中的内容是否一直,而equals方法可以比较两个变量指向堆中的内容是否一样
作者:
李俊超
时间:
2015-6-6 23:58
==和equals的区别?
A:"=="是运算符中
关系运算符的一种:比较基本数据类型是不是相等,返回类型是
boolean
类型(true/flase)
。
B
:
equals是API 常用类String类中的方法:
public boolean equals(Object obj)方法:指示其他某个对象是否与此对象“相等”。
//该方法默认情况下比较地址值;比较地址值一般来说意义不大,所有我们要重写此方法;
如何重写呢?
public boolean equals(Object obj){
return true;//重写的返回值为ture.
//这里要比较所有的返回值都是true.没有意义需要改进:Studentl类其实要比较name和age;
//但是,name是String类型,而String是引用类型的,所有,在这里不能直接用”==“比较,
应该用equals比较,重写equals方法;
String的equals()方法是重写自Object类的,比较的是字符串的内容是否相同。
}
源码: public boolean equals(Object obj){
return (this==obj);
s1 == s2 //比较引用对象的地址值:
}
重写后的代码:
//hashCode的方法重写:
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
//equals()方法的重写(eclipes自动调出):
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public calss StudentDemo{
public static void main(String[] args){
Student s1 = new Student("楼主",23);
Student s2 = new Student("楼主" , 23);
Student s3 = s1;
System.out.println(s1==s2);//flase
System.out.println(s1==s3);//ture
System.out.println(s.equals(s2));//没有重写hashCode是: flase;重写hashCode和equals后是ture;
}
}
总结:
”==“比较的是地址对用的哈希值,即对象的hashCode值(基本数据类型)是否相等。
”equals"比较的是重写后对应的String类(应用类型)是否相等(即Student。中的name);
作者:
bianzhiguo6
时间:
2015-6-7 00:23
http://bbs.itheima.com/thread-189392-1-1.html
详细解答
作者:
xiaodong
时间:
2015-6-7 01:45
==:
比较基本类型:比较的是基本类型的值是否相同。
比较引用类型:比较的是引用类型的地址值是否相同。
equals():
比较引用类型,默认比较的是引用类型的地址值是否相同。
如果类重写了该方法,那就得按照重写后的规则进行比较。
作者:
君子无醉
时间:
2015-6-7 02:28
楼主说的这个问题我重点研究过 ==比较的是值是否相等,如果比较的是基本类型,那么就会比较这两个值,比如3==2,返回值是false 如果比较的是引用类型,比如两个学生对象,那么比较的是地址值,这个地址值就是栈内存变量指向堆内存空间的地址值,你可以造一个没有重写toString()方法的对象,用println输出一下对象名来看一下这个地址值。。
作者:
君子无醉
时间:
2015-6-7 02:34
equal()是一个方法,它存在于Object这个类中,又因为这个类是所有类的父类,所以所有对象都可以调用这个方法,而且这个方法的参数接受的也是任意类型对象 这个方法在Object中,代码大致是return this==obj,就是默认返回的结果是比较这两个对象的地址值是否相同,如果你想要让这个方法比较的是对象的内容是否相同(比如一个学生类 比较姓名 年龄等等),那你自己就需要重写,根据你的需求来重写具体要比较什么,然后设置返回值是true还是false。。至于怎么重写,你可以用eclipse自动生成开看一下 或者通过api查看String这个类
作者:
君子无醉
时间:
2015-6-7 02:41
手机能一次发表的字数有限,接着跟你说 你可以通过API查看String这个类,然后看看它里面的equal方法。。这个方法就是重写后的(java工作人员,封装这个类的时候 重写的) 还有一个需要注意的地方,ArrayList集合中的contains这个方法,底层依赖的是equal方法,如果你集合中的对象中 没有重写equal方法,那么比较是否包含的结果永远都会返回fslse。哥们,手机纯打,希望给点分 如果还有不懂的可以加我扣扣 363246266
作者:
zhouzhiming88
时间:
2015-6-7 09:20
==可以比较基本数据类型以及引用类型,比较基本数据类型比的是具体数值,引用类型比较的是地址值。 equals只能比较引用数据类型,默认情况下比的是地址值,如果重写equals的话,可以根据需求来比较。
作者:
Monster
时间:
2015-6-7 09:29
= 对于在没有在常量池中储存的变量,比较的是内存地址,常量池中储存的变量比较的是内容 Equals是按类中提供的Equals方法来比较,一般比较的内容
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2