java对象比较==和equals的区别
2018-06-18 02:55:28来源:未知 阅读 ()
转载:http://blog.csdn.net/bluesky_usc/article/details/51849125
1值比较
即内容相同,我们就认为是相等的。比如:int i=5;int j =5;此时我们说i和j相等,其实指的是i和j的内容相同。
2引用类型比较
但在Java中,除了值类型,另外还有一种引用类型,而不同的对象,其引用值其实并不相等,即在内存中的不同的地 址单元中。比如我们定义了学生类,分别有两个学生对象实例 :
Student stu= new Student(); Student stu1= new Student();
此时我们无论是使用stu==stu1符号,或者stu.equals(stu1)方法,把两个对象进行比较,得到的结果都是不相等的,因为对于引用类型来说,默认是比较两个对象引用的地址,显示,每个对象的引用有自己唯一的地址,所以,是不相等。
有时,我们比较两个对象时,如果他们的内容一样,那么我们就认为这两个对象是相等的,如上面的两个学生对象。这时,我们该怎么办呢?其实,非常简单,只要在类里面重写equals()方法,进行对象里面的内容比较久可以了。如上面,我们只需要在Student类中重写equals()方法即可。
下面,让我们来看看实例吧! 没有重写equals()方法时的比较:
学生类:Student类
1 class Student 2 { 3 int num; 4 String name; 5 Student(int num,String name){ 6 this.num=num; 7 this.name=name; 8 } 9 10 public int hashCode(){ 11 return num*name.hashCode(); 12 } 13 14 public boolean equals(Object obj){ 15 Student s =(Student)obj; 16 return num==s.num && name.equals(s.name); 17 } 18 19 public String toString(){ 20 return num+"name:"+name; 21 } 22 }
测试类Test:
1.package com.bluesky; 2. 3.public class Test { 4. 5. public static void main(String[] args) { 6. 7. int i=5; 8. int j=5; 9. 10. if(i==j) System.out.println("i和j相等!"); 11. else System.out.println("不相等!"); 12. 13. Student s = new Student("BlueSky"); 14. Student s1=new Student("BlueSky"); 15. 16. if(s==s1) System.out.println("s和是s1相等!"); 17. else System.out.println("s和是s1不相等!"); 18. 19. if(s.equals(s1)) System.out.println("s和是s1相等!"); 20. else System.out.println("s和是s1不相等!"); 21. } 22.}
运行结果:
重写equals()方法后再次进行比较:
Student类:
package com.bluesky; 1. 2.public class Student { 3. 4. String name; 5. 6. public Student(){ 7. 8. } 9. 10. public Student(String name){ 11. 12. this.name=name; 13. 14. } 15. 16. 17. public boolean equals(Object obj) { 18. if (this == obj) //传入的对象就是它自己,如s.equals(s);肯定是相等的; 19. return true; 20. if (obj == null) //如果传入的对象是空,肯定不相等 21. return false; 22. if (getClass() != obj.getClass()) //如果不是同一个类型的,如Studnet类和Animal类, 23. //也不用比较了,肯定是不相等的 24. return false; 25. Student other = (Student) obj; 26. if (name == null) { 27. if (other.name != null) 28. return false; 29. } else if (!name.equals(other.name)) //如果name属性相等,则相等 30. return false; 31. return true; 32. } 33. 34. 35.}
测试类Test:
package com.bluesky; 1. 2.public class Test { 3. 4. public static void main(String[] args) { 5. 6. int i=5; 7. int j=5; 8. 9. if(i==j) System.out.println("i和j相等!"); 10. else System.out.println("不相等!"); 11. 12. Student s = new Student("BlueSky"); 13. Student s1=new Student("BlueSky"); 14. 15. if(s==s1) System.out.println("s和是s1相等!"); 16. else System.out.println("s和是s1不相等!"); 17. 18. if(s.equals(s1)) System.out.println("s和是s1相等!"); 19. else System.out.println("s和是s1不相等!"); 20. } 21.}
运行结果:
重写equals()方法后,得到s和s1相等。==对引用类型的只能进行地址比较,故还是不相等的。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:优化专题
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash