Java 中判断两个对象是否相等
由于每次实例化一个对象时,系统会分配一块内存地址给这个对象,而系统默认是根据内存地址来检测是否是同一个对象,所以就算是同一个类里实例化出来的对象它们也不会相等。
public class Transport {
//名字
public String name;
//运输类型
public String type;
{
name = "交通工具";
type = "运输方式";
}
public void todo()
{
System.out.println("交通工具可以载人载物");
}
}
实例化对象后查看下内存地址,并用equals方法判断是否相等:
public static void main(String[] args) {
Transport obj = new Transport();
Transport obj1 = new Transport();
System.out.println(obj.toString()); //Transport@49476842
System.out.println(obj1.toString()); //Transport@78308db1
System.out.println(obj.equals(obj1)); // false
}
结果是不相等的,那么这两个对象明明是同一个对象,我们该怎么判断它们到底是不是同一个对象呢? 方法也很简单,我们自己重写一个类方法来判断:
public boolean equals(Object o) {
if (this == o) return true; //先判断o是否为本对象,如果是就肯定是同一对象了,this 指向当前的对象
if (o == null || getClass() != o.getClass()) return false; //再判断o是否为null,和o.类对象和本类对象是否一致
Transport transport = (Transport) o; //再把o对象强制转化为Transport类对象
return Objects.equals(name, transport.name) && Objects.equals(type, transport.type); //查看两个对象的name和type属性值是否相等,返回结果
}
再来运行一遍程序:
public static void main(String[] args) {
Transport obj = new Transport();
Transport obj1 = new Transport();
System.out.println(obj.toString()); //Transport@49476842
System.out.println(obj1.toString()); //Transport@78308db1
System.out.println(obj.equals(obj1)); // true
}
Java 中判断两个对象是否相等的更多相关文章
- java中判断两个对象是否相等
package ceshi.com.job; import java.util.ArrayList; import java.util.Arrays; import java.util.List; p ...
- java中判断两个字符串是否相等的问题
我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...
- Java中判断非空对象.
Java中经常会遇到判断非空的时候. 有的时候判断了非空但是还是报空指针,为什么.? 判断的时候一般都会判断两次.类似于: Org o = new Org(); if ( o.getId()!=nul ...
- python中判断两个对象是否相等
#coding=utf-8#比较两个对象是否相等#python 2中使用cmp(),==,is#is 主要是判断 2 个变量是否引用的是同一个对象,如果是的话,则返回 true,否则返回 false. ...
- Java中对比两个对象中属性值[反射、注解]
在Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较.如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪 ...
- javascript中对两个对象进行排序 和 java中的两个对象排序
javascript中的对象数组排序 一 定义一个对象数组 var text = [{"name":"张","age":24},{" ...
- java中new两个对象,在堆中开辟几个对象空间
内存堆中有两个对象,两个对象里都有独立的变量.p1 p2指向的不是同一个内存空间. 也可以这样描述引用p1,p2指向两个不同的对象.
- Java中判断两个Long类型是否相等
在项目中将两个long类型的值比较是否相等,结果却遇到了疑问? 下面就陪大家看看一个神奇的现象! 1.1问题?为什么同样的类型,同样的值,却不相等呢? 1.2那么我们就需要探索一下源码了 源码中显示, ...
- Java中判断两个列表是否相等
CollectionUtils.isEqualCollection(final Collection a, final Collection b) CollectionUtils工具类中有一个查看两个 ...
随机推荐
- ext 3.2 tree 在IE10中点击事件失效的bug
ext3.2 中的tree在IE中进行兼容性测试,遇到IE10时,无法点击,其他版本的IE(7.8.9.11)均正常.此bug是由于ext-all.js中的getAttributeNS方法不能兼容IE ...
- python实现线程池
线程池 简单线程池 import queue import threading import time class ThreadPool(object): #创建线程池类 def __init__(s ...
- 查看mysql表结构的几种方法
desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_schemaselect * fro ...
- ListView设置setFooterDividersEnabled无效的原因
参考文章:http://gundumw100.iteye.com/blog/1169065 我的情况: 高度设置为了wrap_content, 且外边有一个FrameLayout(只包含了listvi ...
- Sqoop导入MySQL数据
导入所有表: sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password p ...
- YUV主要采样格式理解
主要的采样格式有YCbCr 4:2:0.YCbCr 4:2:2.YCbCr 4:1:1和 YCbCr 4:4:4.其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也 ...
- ofstream的问题
ofstream在多字节编码的项目中, 写入中文目录写不了, 英文目录可以 换成c库的fopen, fwrite可以
- 医失眠灵验方--五味子50g 茯神50g 合欢花15g 法半夏15g
方药:五味子50g 茯神50g 合欢花15g 法半夏15g 水煎服 主治:失眠健忘 此方为已故名老中医李培生之验方,用于临床治疗失眠健忘症,疗效显著,其主药为五味子,滋阴和阳,敛阳 ...
- windows常用运行命令收集(持续更新)
快捷键打开运行窗口:Windows + R > calc(计算器) > gpedit.msc(本地组策略编辑器) > regedit(注册表) > mstsc(远程桌面) &g ...
- ios 获取通讯录的所有信息
iOS获取通讯录全部信息 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBoo ...