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工具类中有一个查看两个 ...
随机推荐
- 微信JSSDK示例代码 笔记
using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Secu ...
- adb bugreport > d:/bug.txt
adb bugreport > d: 快速下载anr等bug日志
- vim 显示当前文件名 缩进设置 常用设置
- getdata
public partial class GetData : System.Web.UI.Page { protected void Page_Load(object sender, EventArg ...
- 《Head First 设计模式》ch.3 装饰(Decorator)模式
设计原则 类应该对修改关闭,对扩展开放(开放-关闭原则).在每个地方使用开放-关闭原则是一种浪费,也没有必要,因为这通常会引入新的抽象层次,增加代码复杂度.需要把注意力集中在设计中最有可能改变的地方. ...
- android 拍照,裁切,上传圆形头像, 图片等比缩放
最近太忙了,没有空更新博客,其它部分以后再更新: 今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但 ...
- 在Visual Studio 2013上安装SQLite designer components
最近搞一个WinCE项目,要用到SQLite.看人家都能直接在Visual Studio上连接SQLite.我也按照他们的方法安装了最新的Setups for 32-bit Windows (.NET ...
- 免费的API接口
有如下三个Json格式的查询天气预报接口: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/dat ...
- OSGI.NET 学习笔记--应用篇
关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1. OSGI.NET 与UIOSP OSGi是Open Service Ga ...
- SQL Access Advisor
1.概述: provides advice on improving the performance of a database through partitioning, materialized ...