比较两个相同的对象

public class Cat {
	private String name;
	private int age;
	private double weight;
	private Color color;
	public Cat(String name, int age, double weight, Color color) {
		this.name = name;
		this.age = age;
		this.weight = weight;
		this.color = color;
	}

	//利用属性来判断Cat是否相同
	@Override
	public boolean equals(Object obj) {
		if (this==obj) {//如果两个Cat是同一个对象则相同
			return true;
		}
		if (obj==null) {//如果两个Cat有一个为null则不同
			return false;
		}
		//如果两个Cat的类型不同则不同
		if (getClass()!=obj.getClass()) {
			return false;
		}
		Cat cat = (Cat)obj;
		//比较属性
		return name.equals(cat.name)&&(age==cat.age)&&
				(weight==cat.weight)&&(color.equals(cat.color));
	}
	//hashCode()方法也是必须要写
	public int hashCode(){
		return 7 * name.hashCode()+11*new Integer(age).hashCode()+
				13 * new Double(weight).hashCode() + 17 * color.hashCode();
	}

	@Override
	public String toString() {
		return "Cat [name=" + name + ", age=" + age + ", weight=" + weight
				+ ", color=" + color + "]";
	}

}

测试输出:

Cat cat1 = new Cat("Java", 12, 21, Color.BLACK);
		Cat cat2 = new Cat("C++", 12, 21, Color.WHITE);
		Cat cat3 = new Cat("Java", 12, 21, Color.BLACK);
		System.out.println("Cat1号:"+cat1);
		System.out.println("Cat2号:"+cat2);
		System.out.println("Cat3号:"+cat3);
		System.out.println("Cat1是否与Cat2相同:"+cat1.equals(cat2));
		System.out.println("Cat1是否与Cat3相同:"+cat1.equals(cat3));

时间: 2024-08-29 01:05:33

比较两个相同的对象的相关文章

函数内部两个特殊的对象---arguments和this

一.函数内部属性 在函数内部,有两个特殊的对象:arguments和this.arguments是一个类数组对象,包含着传入函数中的所有参数,主要用途是保存函数参数.但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数. function box(num) { if (num <= 1) { return 1; } else { return num * box(num-1); //一个简单的的递归 } } 对于阶乘函数一般要用到递归算法,所以函数

聊聊JVM(三)两种计算Java对象大小的方法

这篇说说如何计算Java对象大小的方法.之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示 这篇中已经说了Java对象的内存表示模型是Oop-Klass模型. 普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4.Padding(内存对齐),按照8的倍数对齐 数组对象结构是 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对

定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式. 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数

C#用反射实现两个类的对象之间相同属性的值的复制

在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要写很多行复制语句,麻烦还容易漏掉一些,这个时候可以利用c#的反射来实现复制.我们可以写这样一个利用泛型的映射函数. 1.适用于创建实体的时候从一个实体作为数据源赋值 /// <summary> /// 反射实现两个类的对象之间相同属性的值的复制 /// 适用于初始化新实体 /// </sum

Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)

delphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) of Object; 两者样子差不多但实际意义却不一样, TMouseProc只是单一的函数指针类型; TMouseEvent是对象的函数指针,也就是对象/类的函数/方法 区别在于类方法存在一个隐藏参数self,也就是说两者形参不一样,所以不能相互转换 这也就是为什么delphi中可以这样赋值 but

java两种创建String对象的区别

public class StringTest{     public static void main(String[] args){         String s1="abc";//只会在字符串常量池中创建一个"abc"字符串对象         String s2=new String("eieie");//会在字符串常量池中创建一个"hello"字符串对象,并且会在堆中再创建一个字符串对象     } } //第二

JS两种方式访问对象属性

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <p> 有两种方式可以访问对象属性: </p> <p> 你可以使用 .property 或 ["property"]. </p>

验证两个数组或者对象是否相同

/** * 验证两个object 是否相同 * @param {Object} obj [需要进行验证的数据1] * @param {Object} newObj [需要进行验证的数据2] */ function objSame (obj,newObj) { let bol = true; if (Object.keys(obj).length != Object.keys(newObj).length) { return false; } for(let key in obj) { if (

函数内部的两个特殊的对象:arguments和this

arguments是一个类数组对象,包含着传入函数中的所有参数 在arguments中还存在着一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数. 下面是一个阶乘函数 function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } 但是这个函数的执行与函数名紧紧耦合在一起 <!DOCTYPE html> <html> <head&g