文档章节

java中比较两个对象

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

码上生花,ECharts 作品展示赛正式启动!>>>

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
2018/04/27
88
0
java中int和Integer的区别

Java中int类型和Integer类型的区别: 1.int是Java的一种基本数据类型,Integer是int的包装类(引用类型)。 2.int变量不需要实例化即可使用,而Integer变量必须要实例化后才能使用。(Integ...

osc_vylqfbau
2019/04/18
2
0
Java入门系列之字符串创建方式、判断相等(一)

前言 陆续从0开始学习Java出于多掌握一门语言以后的路也会更宽,.NET和Java兼顾,虽然路还很艰难,但事在人为。由于Java和C#语法相似,所以关于一些很基础的内容不会再重头讲,Java系列中所有...

osc_t0xmr011
2019/08/30
1
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
124
0
深入探究Java中equals()和==的区别是什么

[toc]“判断两个事物是否相等”,是编程中最常见的操作之一,在Java中,判断是否相等有两种方法,一种是使用“==”判断符,另一种是使用“equals()”方法,你是否曾因混用二者导致不可思议的...

osc_urm28qtx
04/16
3
0

没有更多内容

加载失败,请刷新页面

加载更多

(转)Linux系统:centos7下搭建Rocketmq4.3中间件,配置监控台

原文:https://www.bbsmax.com/A/Ae5RRKe35Q/ 一、环境搭建 环境版本 centos7 jdk1.8 已搭建好 rocketmq4.3 1、下载安装包 网址 https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.......

osc_3iv3c4fo
24分钟前
18
0
rocketmq 发送时异常:system busy 和 broker busy 解决方案(2019-06更新)

rocketmq 发送时异常:system busy 和 broker busy 解决方案(2019-06更新) 参考文章: (1)rocketmq 发送时异常:system busy 和 broker busy 解决方案(2019-06更新) (2)https://www.cnb...

osc_e7yhr5of
26分钟前
22
0
Redis雪崩效应以及解决方案

Redis雪崩效应以及解决方案 参考文章: (1)Redis雪崩效应以及解决方案 (2)https://www.cnblogs.com/toov5/p/9895929.html 备忘一下。...

osc_6k3dbwo9
27分钟前
38
0
学习rabbitmq (二) 使用rabbitmq

以为rabbitmq会折腾很久,但没有想到就这么多点内容,主要是服务端的懒得去折腾,比如docker的转移啊,发布啊,部署啥的 今天写了一些代码,用的c#弄的,新建两个项目,一个sender,一个rec...

osc_8hhlaimy
28分钟前
22
0
指定版本拉取

https://blog.csdn.net/csdn_idiot/article/details/106188831 https://blog.csdn.net/bjrxyz/article/details/90347292 chromium(linux环境)指定版本下载和编译教程 csdn_idiot 2020-05-2......

osc_hinb5m98
30分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部