关于对象的比较我们可以通过以下三种手段来实现
一、利用"=="比较引用
Java中,当比较简单类型变量时用"==",只要两个简单类型值相等即返回ture,否则返回false,而在对象的比较中,"=="运算符就是比较引用变量所指向的内存地址是否相同 ;
 
二、通过覆盖equals方法比较引用

User u1=new User("Tom");
User u2=new User("Tom");
User u3=u1;
u3.setName("Jack");
u1==u3//true
u1.equals(u3)//true
u1==u2//false;
u1.equals(u2)//false

三、重写equals()方法
在Java API中,有些类重写了equals()方法,这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等。

String s1=new String("hello");
String s2=new String("hello");
s1==s2//false,按地址进行比较
s1.equals(s2)//true, 已重写,按值进行比较

三、手动重写equals方法比较对象
在定义一个类的时候,如果涉及到对象的比较,应该重写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;
}

最后给出一个标准的对象比较范例
package javacompareDemo;
//对象的比较
class person{
private String name;
private int age;
public person(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//这里注意,比较操作是应该发生在person类内部函数上的
public boolean compare(person per){
if(this==per)
return true;
if(this.name.equals(per.name)&&this.age==per.age)
return true;
else
return false;
} }
public class ClassCompare1 { public static void main(String[] args) {
person per1 = new person("影流之主",19);
person per2 = new person("放逐之刃",18);
person per3 = new person("影流之主",19);
System.out.println(per1.compare(per2));
System.out.println(per1.compare(per3));
}
}

java对象的比较分析的更多相关文章

  1. 理解Java对象:要从内存布局及底层机制说起,话说….

    前言 大家好,又见面了,今天是JVM专题的第二篇文章,在上一篇文章中我们说了Java的类和对象在JVM中的存储方式,并使用HSDB进行佐证,没有看过上一篇文章的小伙伴可以点这里:<类和对象在JV ...

  2. 源码分析:Java对象的内存分配

    Java对象的分配,根据其过程,将其分为快速分配和慢速分配两种形式,其中快速分配使用无锁的指针碰撞技术在新生代的Eden区上进行分配,而慢速分配根据堆的实现方式.GC的实现方式.代的实现方式不同而具有 ...

  3. JVM源码分析之Java对象头实现

    原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Java对象头实现 HotSpot虚拟机中,对象在内存中的布局分为三 ...

  4. JAVA对象分析之偏向锁、轻量级锁、重量级锁升级过程

    在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding). 对象头 HotSpot虚拟机(后面 ...

  5. java内存区域分析及java对象的创建

    java虚拟机在执行java程序的过程中会将它管理的内存区域加分为若干个的不同的数据区域. 主要包括以下几个运行时数据区域,这里就只介绍经常会用到的 1:java虚拟机栈:我们常说的堆栈,栈就是指的j ...

  6. 使用Gson转换json数据为Java对象的一个例子

    记录工作中碰到的一个内容. 原料是微信平台的一个接口json数据. { "errcode" : 0, "errmsg" : "ok", &q ...

  7. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  8. 玩转Java对象和XML相互转换

    最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ...

  9. Java提高篇——通过分析 JDK 源代码研究 Hash 存储机制

    HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实 ...

随机推荐

  1. Windows 7/Vista 开机自动登录

    “Win”+“R”打开命令窗口,输入"control userpasswords2"(不包括引号),或者 “rundll32 netplwiz.dll,UsersRunDll” 回 ...

  2. mysql学习笔记--第1天

    1.像网页上的账户.图片.文章都是存在数据库里面2.Oracle .DB2 .SQL server等等多钟数据库 PHP中选择使用mysql PHP+mysql黄金搭档 PHP和mysql都是开源的, ...

  3. Arduino周边模块:LED部件

    Arduino周边模块:LED部件 Arduino周边模块:LED部件 1. LED的使用 LED的原理: LED是会发光的二极管,它具有单向导电性.两端加上正向电压,即能将电能转化为光能. 正向电压 ...

  4. Android加载图片小结

    应用中用到图片加载需要解决的问题 无网络环境下图片不可用 图片的本地缓存,或者默认预加载的图片 低配置机型,加载图像资源超内存(OutOfMemory, OoM) 需要合理使用内存,尤其是bitmap ...

  5. PHP基于变量的引用实现的树状结构

    直接上代码: function aryTree($ary, $tagId = 'id', $tagPid = 'pid', $tagSub = '_sub') { if(is_array($ary)) ...

  6. Ubuntu各种软件的安装

    普通的例如g++.deadbeef等源中有的软件,可以用apt-get安装 sudo apt-get install XXX 还有很多直接在software center搜索下载 对于下载来源代码需要 ...

  7. Exchange Web Service 获取邮件的附件并保存到本地的示例代码

    private static void DownLoadMailAttachments(ExchangeService service, ItemId itemId) { EmailMessage m ...

  8. ulimit 说明

    ulimit官方描述 Provides control over the resources available to the shell and to processes started by it ...

  9. Android之Service与IntentService的比较

    Android之Service与IntentService的比较  不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentServ ...

  10. PHPExcel 多工作表 导出

    //浏览器输出excel header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ...