转载: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. 陷入了一个NGUI自适应的一个坑

    自己对anchor的乱用.造成自己深陷anchor来搞自适应 耽误了太多的精力,最终也是回到正轨的途径 这期间浪费的太多精力了. 沉迷一件错误的事情过久 就 要果断的跳出 调整 . 但凡让自己觉得别扭 ...

  2. bzoj4814: [Cqoi2017]小Q的草稿

    Description 小Q是个程序员.众所周知,程序员在写程序的时候经常需要草稿纸.小Q现在需要一张草稿纸用来画图,但是桌上 只有一张草稿纸,而且是一张被用过很多次的草稿纸.草稿纸可以看作一个二维平 ...

  3. P2670扫雷

    链接 这是一个并不像搜索的题(其实它是个循环) 对于输入的a数组,一个一个遍历下来,如果a[i][j]是雷,那(i,j)周围8个点对应的位置雷数就+1(用b数组记录),注意不能超出边界,输出时,如果a ...

  4. [UE4]在蓝图中判断一个对象是否有效

  5. Java基础知识_毕向东_Java基础视频教程笔记(19-21 IO流)

    18天-06-IO流 字节流和字符流 字节流两个基类:InputStream,FileInputStream,BufferedInputStream OutputStream,FileOutputSt ...

  6. hue中使用oozie的workflow执行mr

    workflow创建任务 进入hue–Workflows–编辑器–workflow–创建 拖一个mapreduce作业(在页面靠近顶端有一排选项图标)到页面中间虚线框中 Jar路径必须是hdfs中ja ...

  7. DELPHI中自定义消息的发送和接收

    DELPHI中的消息处理机制 Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpasca ...

  8. matlab 画图参考小程序

    x=0.1:0.1:0.9; a=[41.37,44.34,44.34,44.66,44.66,44.66,98.85,98.85,98.85];%xxxxxx b=[22.10,22.39,22.3 ...

  9. Spark2.X分布式弹性数据集

    跑一下这个结果 参考代码 package com.spark.test import org.apache.spark.sql.SparkSession import org.apache.spark ...

  10. 旷视等Oral论文提出GeoNet:基于测地距离的点云分析深度网络

    基于网格曲面的几何拓扑信息可以为物体语义分析和几何建模提供较强的线索,但是,如此重要的连接性信息在点云中是缺失的.为此,旷视西雅图研究院首次提出一种全新的深度学习网络,称之为 GeoNet,可建模点云 ...