文档章节

java中比较两个对象

jacky_123
 jacky_123
发布于 2015/03/03 10:12
字数 475
阅读 21
收藏 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
JVM系列第8讲:JVM 垃圾回收机制

在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由《Java 虚拟机规范》指定的,每个 Java 虚拟机可能都有不同的实现。其实涉及到 Java 虚拟机的内存,就不得不谈到 Ja...

陈树义
11/21
0
0
Scala对象比较==、eq、ne与java==、equals()

如果你想比较一下看看两个对象是否相等,可以使用或者==,或它的反义 !=。(对所有对象都适用,而不仅仅是基本数据类型) scala> 1 == 2res24: Boolean = falsescala> 1 != 2res25: Boolean...

hanzhankang
2014/02/16
0
5
【翻译】Java中String, StringBuffer, StringBuilder的区别

String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会用String定义一些内容,然后通过著名的System.out.println()语句来打印出来。 然而,很多Java新手都不会意识到 String...

YuanyuanL
2014/09/03
0
4
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

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Stream消费失败后的处理策略(二):自定义错误处理逻辑

应用场景 上一篇《Spring Cloud Stream消费失败后的处理策略(一):自动重试》介绍了默认就会生效的消息重试功能。对于一些因环境原因、网络抖动等不稳定因素引发的问题可以起到比较好的作用...

程序猿DD
12分钟前
0
0
Java 使用 pinyin4j 生成汉字拼音

添加 pinyin4j jar包 <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> ......

yh32
23分钟前
0
0
Deepin 安装wireshark抓包工具

一、关于deepin和wireshark deepin目前已经发展到15.8了,开发Android毫无压力,在四个月的使用时间里,已经非常习惯了。目前想处理一些网络问题,因此尝试在deepin上安装一个抓包工具。dee...

IamOkay
今天
6
0
Docker镜像仓库服务-Nexus

建立云原生集群系统,建立自己的私有Docker镜像仓库必不可少。一方面可以加快多节点部署容器镜像的下载速度,另一方面是为了安全(容器里存储有系统所有的信息、包括密码、数据库等等,切记不...

openthings
今天
6
0
127.0.0.1 和 0.0.0.0 地址的区别

1. IP地址分类 1.1 IP地址表示 IP地址由两个部分组成,net-id和host-id,即网络号和主机号。 net-id:表示ip地址所在的网络号。 host-id:表示ip地址所在网络中的某个主机号码。 即: IP-a...

华山猛男
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部