文档章节

java中比较两个对象

jacky_123
 jacky_123
发布于 2015/03/03 10:12
字数 475
阅读 20
收藏 0

JAVA中比较两个对象,其实就是判断两个对象的引用变量是否相等 

1. ==运算符就是比较引用变量所指向的内存地址是否相同 

2. equals(Object o)方法,也是按内存地址比较,但用户可以覆盖Object类的equals方法 

User u1=new User("Tom");

   User u2=new User("Tom");

   User u3=u1;

   u3.setName("Jack");

   System.out.println("u1==u3\t\t"+Boolean.toString(u1==u3));

   System.out.println("u1.equals(u3)\t"+Boolean.toString(u1.equals(u3)));

   System.out.println("u1==u2\t\t"+Boolean.toString(u1==u2));

   System.out.println("u1.equals(u2)\t"+Boolean.toString(u1.equals(u2)));

输出结果为:

u1==u3  true

u1.equals(u3) true

u1==u2  false

u1.equals(u2) false

 

 

3. Java中的一些类覆盖了equals方法,以事项按对象值进行比较,这些类包括,String,Date,Byte,Integer,Short,Character,Long,Float,Double,Boolean 

String s1=new String("hello");

String s2=new String("hello");

s1==s2//false,按地址进行比较

s1.equals(s2)//true, 已重写,按值进行比较

 

4. 重写equals的一个例子 

public boolean equals(Object o)

{

   //如果和自身比较,返回TRUE

   if(this==o) return true;

   //如果不是这个类的实例,返回FALSE

   if(!o instanceof User) return false;

   

   final User u=(User)o

   if(this.getName().equals(u.getName())

      return true;

   else

      return false;

}

重写了equals方法,那么上面的程序输出的结果是多少呢?

答案是

u1==u3  true

u1.equals(u3) true

u1==u2  false

u1.equals(u2) false

a、u1==u3  true 这个很好理解,u1 与 u3 指向同一块内存,u1 == u3比较的是内存地址,所以,一样大

b、u1.equals(u3)     true  ,在equals中,if(this==0) return true; 原理还是a

c、u1==u2  false    不多说了,大家再熟悉不过了

d、u1.equals(u2)     false,开始我以为相等的,其实我错了,因为u1 u3指向同一块内存,在u1.equals(u2)之前,有个u3.setName("Jack") 将name属性的值改为Jack,比较的时候就编程(“Jack”.equals("Tom"))其结果肯定是false了。

 

参考:

http://ssh-2009-126-com.iteye.com/blog/478008

© 著作权归作者所有

共有 人打赏支持
jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
scala中的==、equals、eq

scala中equals方法和==是检查值是否相等,而eq方法检查的是引用是否相等。 Scala 的==与Java的有何差别 Java 里的既可以比较基本类型也可以比较引用类型。对于基本类型,Java 的==比较 值比较...

张欢19933
04/27
0
0
java中String对象和String变量

java中String对象和String变量 (2011-12-27 20:40:27) 转载▼ 标签: it 最近在论坛上看到关于String s = new String("XYZ") + new String("XYZ");到底创建几个对象的讨论,觉得比较有意思,...

什么是程序员
2015/08/12
0
0
你不知道的 equals 和 ==

先来看一道 equals和 == 相关的面试题吧。 先告诉你答案是 true,true,false,true。 i1 == i2 和 i1.equals(i2) 这两个都是 true,大多数人应该可以答对。后面的 i3 == i4 和 i3.equals(i4...

Wizey
08/17
0
0
理解Java Integer的缓存策略

本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这...

analogous_love
04/26
0
0
最最最常见的Java面试题总结-第一周

这里会分享一些出现频率极其极其高的面试题,初定周更一篇,什么时候更完什么时候停止。 Github地址:https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/最最最常见的Java面试...

Amsour丶
08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
17分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
20分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
22分钟前
3
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
26分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部