昨天参加了某欧美500强的笔试题,最后一道编程题目就是这个,其实是很基础的题目,我却没做出来,今天研究了一下,给和我一样对此还有些模糊的朋友分享下:
先写一个Cat类,里面包含了重写的equals,hashcode,toString方法
public class Cat {
int number;
String color;
public Cat(int number,String color) {
this.number = number;
this.color = color;
}
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj==null){
return false;
}
if(obj instanceof Cat) {
Cat cat = (Cat)obj;
if(cat.color == this.color && cat.number == this.number){
return true;
}
}
return false;
}
public int hashCode() {
return number;
}
public String toString() {
return "number:"+this.number+", color="+this.color;
}
}
再一个main方法类:
public class MainTest {
public static void main(String[] args) {
Cat cat1 = new Cat(1,"red");
Cat cat2 = new Cat(1,"red");
System.out.println(cat1==cat2);
System.out.println(cat1.equals(cat2));
Map map = new HashMap();
System.out.println(cat1);
System.out.println(cat2);
map.put(cat1,"hello");
map.put(cat2, "hello");
System.out.println(map.size());
}
}
解析:
1.equals方法默认是比较两个对象的引用地址的,cat1和cat2是在内存中分配了两个不同的空间,如果不重写equals方法,那么cat1和cat2两个对象的引用永远不会相等的;
2.以前看书常说,重写了equals方法就要重写hashcode方法,当时不太明白,今天翻阅了些资料,原来一些集合类,如hashmap在执行put方法时,会去比较每次push进去的“键”值是否相同,而这个比较就是调用对象的hashcode方法和equals方法,所以如果不重写hashcode方法,那么上述例子,map.size的结果将是2;
3.关于重写toString方法,主要是用在打印对象时,因为打印时默认打印的是对象的内存地址,你可以重写对象的toString方法,来达到你想要呈现出来的字符串效果。
打印结果是:
分享到:
相关推荐
Java 中重写 equals() 方法的同时要重写 hashCode() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...
在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...
在 Java 编程语言中,Object 类是所有类的父类,但是在实际开发中,我们往往需要重写 Object 中的 equals 和 hashCode 方法,以便正确地比较对象的逻辑内容,而不是内存地址。下面我们将详细地解释为什么需要重写这...
通过该案例代码,你可以学习如何在自己的类中正确重写equals()、hashCode()、toString()等方法,提高代码质量和可读性。 经验丰富的Java开发者:即使你已经有一定的Java开发经验,仍然值得深入了解Object类的使用。...
### Java 高级特性详解 #### 一、`hashCode` ...正确地重写 `equals` 和 `hashCode` 方法、使用 `Comparator` 进行排序、利用反射机制和序列化技术,以及实现 `clone` 方法都是开发高质量 Java 应用程序的重要技能。
ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法
在这个例子中,`Demo1`类重写了`equals`方法和`hashCode`方法。通过`equals`方法确保只有`value`相等时才认为两个对象相等;而`hashCode`方法则返回`id`的值。这样设计可以确保即使`id`不同但`value`相同的对象被视...
谁在关心toString的性能?没有人!除非当你有大量的数据在批量处理,使用...我们所钟爱的IDE们常常为我们生成equals/hashcode/toString这些方法,且我们通常不再去管它们。此外,这些IDE们提供了许多方式来生成我们自己
本文将深入探讨`Object`类,以及其核心方法`equals()`与Java中的`==`操作符之间的差异。 `Object`类位于Java的核心库`java.lang`包中,它提供了基本的方法来支持对象的创建、比较和字符串表示。以下是`Object`类的...
- 为了比较对象内容的相等性,我们需要重写equals()方法,确保遵循自反性、对称性、传递性、一致性原则,并确保与null的比较。 2. **hashCode() 方法**: - 该方法返回对象的哈希码,用于哈希表(如HashMap、...
因此,当重写`equals`方法时,通常也需要重写`hashCode`方法,确保两个`equals`结果为真的对象具有相同的哈希码。 #### 六、`toString`方法详解 - `toString`方法返回对象的字符串表示形式,默认情况下,`Object`...
在Java中,`Object`类是所有类的父类,它提供了几个核心的方法,包括`equals()`, `hashCode()`, 和 `toString()`。 `equals()`方法用于比较两个对象是否相等。默认实现比较的是对象的引用,即两个对象是否指向内存...
在Java中,hashCode方法是Object类中的一个重要方法,它是所有Java类的父类。 toString方法是返回对象的字符串表示的方法。它可以将对象的属性转换为字符串,以便于程序内查看对象属性和调试代码。 在Java中,...
在这个阶段,主要讲解的是Java中对象的常用API,特别是关于`equals()`方法和`toString()`方法的使用,以及API的基本概念和`Object`类的概述。以下是这些知识点的详细解释: 1. **API概念**:API,全称为Application...
Object类中默认的equals()方法实现在Java中等同于“==”,它比较的是对象的引用地址是否相同。但许多类重写了equals()方法来比较对象的实际内容。 3. toString()方法在Object类中返回的是对象的类名加上“@”符号,...
2. **提供通用方法**:`Object` 类定义了一些非常重要的方法,如 `equals()`、`hashCode()` 和 `toString()`,这些方法在几乎所有 Java 类中都有应用。 3. **支持多态性**:通过继承 `Object` 类,Java 支持多态性,...
- 在重写equals()方法时,需要考虑各种边界情况,如对象是否为null,对象的类型是否相同等。 - IDE可以帮助生成equals()方法的代码,可以使用快捷键alt+insert选择equals()and hashcode()选项。 #### 4. 日期类的...
JAVA 中常用类的常用方法 JAVA 中有许多常用的类,每个类都有其特定的方法,本文将对 java.lang.Object 类、String 类和 StringBuffer 类的常用方法进行讲解。 一、java.lang.Object类 java.lang.Object 类是 ...