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工具类中有一个查看两个 ...
随机推荐
- JAVA 回调
一.定义 回调就是把函数指针做为参数传入,如函数A做为参数传入函数B,由B函数决定何时.何地调用函数A, function A() function B(A) { ...
- ubuntu14.04离线配置cm5.5.1
cd /opt/cm-5.5.1/具体参考http://www.aboutyun.com/thread-10852-1-1.html 离线安装:下载所需文件 http://archive.cloude ...
- Spark-1.5.2安装
1.下载scala-2.10.6包解压到指定目录 #SCALA VARIABLES START export SCALA_HOME=/usr/local/scala-2.10.6 export PAT ...
- 1、程序启动原理和UIApplication【转】
一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplica ...
- [译]使用AES 256以达到SSL/TLS安全最大化
原文链接:https://luxsci.com/blog/256-bit-aes-encryption-for-ssl-and-tls-maximal-security.html 原文发表时间:201 ...
- USACO Section 3.2 香甜的黄油 Sweet Butter
本题是多源最短路问题 但使用弗洛伊德算法会超时 而因为边数目比较少 所以用队列优化后的迪杰斯特拉算法可以通过 #include<iostream> #include<cstring& ...
- 学习练习 java面向对象封装汽车
package com.hanqi; //汽车 public class Car { // 车牌 private String CheP; // 油箱容量 private double YouXRL ...
- 调用robustfit函数作稳健回归
调用robustfit函数作稳健回归 regress函数和regstats函数利用普通最小二乘法估计模型中的参数,参数的估计值受异常值的影响比较大.robustfit函数采用加权最小二乘法估计模型中的 ...
- php curl 提交 总结
1.post https提交 方法 function curl_post2($url='', $postdata='', $options=array()){ $ch = curl_init($url ...
- ajax contenttype
jquery ajax基本形式: $.ajax({ type: 'POST/get', url: '', data: {"n":n,"m":m}, dataTy ...