`
yuankai08021
  • 浏览: 14801 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于java中重写equals,hashcode,toString的方法

 
阅读更多
昨天参加了某欧美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() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...

    equals,hashcode,toString

    在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...

    学习Object类——为什么要重写equeals和hashcode方法

    在 Java 编程语言中,Object 类是所有类的父类,但是在实际开发中,我们往往需要重写 Object 中的 equals 和 hashCode 方法,以便正确地比较对象的逻辑内容,而不是内存地址。下面我们将详细地解释为什么需要重写这...

    Java的Object类讲解案例代码 equals()、hashCode()、finalize()、clone()、wait()

    通过该案例代码,你可以学习如何在自己的类中正确重写equals()、hashCode()、toString()等方法,提高代码质量和可读性。 经验丰富的Java开发者:即使你已经有一定的Java开发经验,仍然值得深入了解Object类的使用。...

    JAVA_高级特性(hashCode,clone,比较器,Class反射,序列化)

    ### Java 高级特性详解 #### 一、`hashCode` ...正确地重写 `equals` 和 `hashCode` 方法、使用 `Comparator` 进行排序、利用反射机制和序列化技术,以及实现 `clone` 方法都是开发高质量 Java 应用程序的重要技能。

    javaee_tedu_day09.zip

    ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法

    hashCode的作用

    在这个例子中,`Demo1`类重写了`equals`方法和`hashCode`方法。通过`equals`方法确保只有`value`相等时才认为两个对象相等;而`hashCode`方法则返回`id`的值。这样设计可以确保即使`id`不同但`value`相同的对象被视...

    Java toString的性能优化方案比较

    谁在关心toString的性能?没有人!除非当你有大量的数据在批量处理,使用...我们所钟爱的IDE们常常为我们生成equals/hashcode/toString这些方法,且我们通常不再去管它们。此外,这些IDE们提供了许多方式来生成我们自己

    Java Object类认识

    本文将深入探讨`Object`类,以及其核心方法`equals()`与Java中的`==`操作符之间的差异。 `Object`类位于Java的核心库`java.lang`包中,它提供了基本的方法来支持对象的创建、比较和字符串表示。以下是`Object`类的...

    Java Object 类高难度进阶版面试题集锦解析Java Object类高难度面试题及答案解析

    - 为了比较对象内容的相等性,我们需要重写equals()方法,确保遵循自反性、对称性、传递性、一致性原则,并确保与null的比较。 2. **hashCode() 方法**: - 该方法返回对象的哈希码,用于哈希表(如HashMap、...

    Java实训教程 Java软件开发实战 Java类库 第1章 Object类 共29页.pptx

    因此,当重写`equals`方法时,通常也需要重写`hashCode`方法,确保两个`equals`结果为真的对象具有相同的哈希码。 #### 六、`toString`方法详解 - `toString`方法返回对象的字符串表示形式,默认情况下,`Object`...

    java课件 常用类与异常处理

    在Java中,`Object`类是所有类的父类,它提供了几个核心的方法,包括`equals()`, `hashCode()`, 和 `toString()`。 `equals()`方法用于比较两个对象是否相等。默认实现比较的是对象的引用,即两个对象是否指向内存...

    java中object类实例分析

    在Java中,hashCode方法是Object类中的一个重要方法,它是所有Java类的父类。 toString方法是返回对象的字符串表示的方法。它可以将对象的属性转换为字符串,以便于程序内查看对象属性和调试代码。 在Java中,...

    JavaSE基础入门视频教程33天之(15) part1

    在这个阶段,主要讲解的是Java中对象的常用API,特别是关于`equals()`方法和`toString()`方法的使用,以及API的基本概念和`Object`类的概述。以下是这些知识点的详细解释: 1. **API概念**:API,全称为Application...

    java源码分析

    Object类中默认的equals()方法实现在Java中等同于“==”,它比较的是对象的引用地址是否相同。但许多类重写了equals()方法来比较对象的实际内容。 3. toString()方法在Object类中返回的是对象的类名加上“@”符号,...

    java-object类

    2. **提供通用方法**:`Object` 类定义了一些非常重要的方法,如 `equals()`、`hashCode()` 和 `toString()`,这些方法在几乎所有 Java 类中都有应用。 3. **支持多态性**:通过继承 `Object` 类,Java 支持多态性,...

    Java基础第二部分课程资料.pdf

    - 在重写equals()方法时,需要考虑各种边界情况,如对象是否为null,对象的类型是否相同等。 - IDE可以帮助生成equals()方法的代码,可以使用快捷键alt+insert选择equals()and hashcode()选项。 #### 4. 日期类的...

    JAVA中常用类的常用方法.docx

    JAVA 中常用类的常用方法 JAVA 中有许多常用的类,每个类都有其特定的方法,本文将对 java.lang.Object 类、String 类和 StringBuffer 类的常用方法进行讲解。 一、java.lang.Object类 java.lang.Object 类是 ...

Global site tag (gtag.js) - Google Analytics