转载: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类

 class Student
{
int num;
String name;
Student(int num,String name){
this.num=num;
this.name=name;
} public int hashCode(){
return num*name.hashCode();
} public boolean equals(Object obj){
Student s =(Student)obj;
return num==s.num && name.equals(s.name);
} public String toString(){
return num+"name:"+name;
}
}

测试类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相等。==对引用类型的只能进行地址比较,故还是不相等的。

java对象比较==和equals的区别的更多相关文章

  1. java对象POJO和JavaBean的区别

    "Plain Ordinary Java Object",简单普通的java对象.主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象.POJO的内在含义是指那些:有 ...

  2. java中的==和equals的区别

    关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...

  3. 【java基础 15】java代码中“==”和equals的区别

    导读:昨夜闲来无事,和贾姑娘聊了聊java基础,然后就说到了这个"=="和equals的问题,我俩都是以前了解过,也常用这个,但是,昨天说到的时候,又乱了,什么比较地址值,什么判断 ...

  4. Java对象 POJO和JavaBean的区别

    转载自https://www.jianshu.com/p/224489dfdec8 这篇博客很通俗易懂的讲明白了什么是POJO,对于刚开始学开发做java项目的菜鸟来说,很有帮助,网课老师是不会讲这些 ...

  5. Java中的==和equals的区别详解

    1.基础知识 (1)String x = "hello"; (2)String x = new String ("hello"); 第1种方式的工作机制是,首先 ...

  6. java中hashcode和equals的区别和联系

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  7. 【java基础】 == 和 equals() 的区别

    ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型(指的值类型)时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值: int x ...

  8. java中等于和equals的区别

    面试的时候没答上,很受打击,特写在这里. ==是判断两个变量或实例是不是指向同一个内存空间equals是判断两个变量或实例所指向的内存空间的值是不是相同 除了String和封装器,equals()和“ ...

  9. Java 面试题 == 和 equals 的区别

    int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的引 ...

随机推荐

  1. 数据类型---列表,for循环

    定义:列表是一个数据的集合,集合内可以放任何数据类型,可对集合进行方便的增删改查操作. L1=[]   #定义空列表 L2=[1,2,3,4]   #存4个值,索引为0-3 L3= ["ab ...

  2. 问题 B: 【例9.3】求最长不下降序列(基础dp)

    问题 B: [例9.3]求最长不下降序列 时间限制: 1 Sec  内存限制: 128 MB提交: 318  解决: 118[提交][状态][讨论版][命题人:quanxing] 题目描述 设有由n( ...

  3. eclipse安装、汉化、搭建安卓开发环境

    1.eclipse与jdk的位数(32bit or 64bit )要对应,否则会提示Failed to load JNI shared library.提示这一种错误据说还有另外一种原因就是Path路 ...

  4. vSphere 查看FC HBA的WWNN和WWPN

    #     查看WWN号  

  5. Jmeter(三十七)源码导入IDE(转!)

    转自:http://www.cnblogs.com/taoSir/p/5144274.html[eclipse]    https://blog.csdn.net/collonn/article/de ...

  6. 基于HAProxy+Keepalived高可用负载均衡web服务的搭建

    一 原理简介 1.HAProxyHAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web ...

  7. (转)Java调用Weservice

    原文地址:http://www.cnblogs.com/jiangxu1989/p/6491483.html https://www.cnblogs.com/neughj/p/5145630.html ...

  8. 使用nginx secure_link指令实现下载防盗链

    一.安装nginx并检查是否已安装模块 [root@img_server ~]# nginx -V #输出nginx所有已安装模块,检查是否有ngx_http_secure_link_module 二 ...

  9. VMware网络桥接模式与NAT模式共存

      对虚拟机有时我们会有一种需求,即需要虚拟机可以作为单独的主机拥有自己的独立IP,也希望宿主机可以通过NAT模式映射端口到虚拟机. 那么此时怎么办那,其实很简单,虚拟机是支持多网卡设置的,只要在虚拟 ...

  10. MySQL多表查询,pymysql模块。

    一 多表查询: 首先什么是多表查询: 我们在实际工作中,不可能把数据都存入一个表中,那么又需要这些表之间有一定的关联,因为表与表之间的数据是相关联的,所以就要用到我们的外键将多表连接到一起,那么我们更 ...