JAVA笔记7-Object类之toString方法和equals方法
位于rt.jar\java\lang\Object.class
Object类是所有Java类的根基类(Java中只有一个根基类,C++中有多个)。如果在类声明中未使用extends关键字指明其基类,则默认其基类为Object类。
所有对象,包括数组,都实现了Object类的方法。
1、toString()方法


蓝色高亮行代码等价于d.toString()。输出:d:=Dog@757aef。重写toString()方法:

2、哈希编码
3、equals()方法

例题:
public class TestEquals{
    public static void main(String args[]){
        Cat c1=new Cat(1,2,3);
        Cat c2=new Cat(1,2,3);
        System.out.println("c1==c2: "+(c1==c2));//false
        System.out.println("c1.equals(c2): "+c1.equals(c2));//false
    }
}
class Cat{
    int colour;
    int high;
    int weight;
    public Cat(int c,int h,int w){
        colour=c;
        high=h;
        weight=w;
    }
}
注意:都返回false。因为比较两个对象时,c1==c2比较的是地址,c1.equals(c2)默认也是如此(只有当c1,c2指向同一对象时为true)。所以应重写equals()方法。
//重写equals()方法
public boolean equals(Object obj){
if(obj==null){
return false;
}
else if(obj instanceof Cat){
Cat c=(Cat) obj;
if(c.colour==this.colour&&c.high==this.high&&c.weight==this.weight){
return true;
}
}
return false;
}
}
重写equals()方法后,输出c1==c2:false,c1.equals(c2):true。
JDK提供的一些类(如String,Date等),重写了Object的equals方法,调用这些类的equals方法时,x.equals(y),当x和y所引用的对象是同一类对象且属性相等时(并不一定是相同对象),返回true,否则返回false。对于用户自定义类型,可根据需要重写equals方法。
public class TestEquals{
    public static void main(String args[]){
        String s1=new String("hello");
        String s2=new String("hello");
        System.out.println("s1==c2: "+(s1==s2));//false
        System.out.println("s1.equals(s2): "+s1.equals(s2));//true
    }
}
JAVA笔记7-Object类之toString方法和equals方法的更多相关文章
- Object类的toString方法和equals方法
		Object类 概述 java.long.Object 类是java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终的父类就是Object 类Object是类层 ... 
- java数组、java.lang.String、java.util.Arrays、java.lang.Object的toString()方法和equals()方法详解
		public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ... 
- Object、String、数组的 toString() 方法和 equals() 方法及java.util.Arrays
		public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ... 
- Java中的class类的cast方法和asSubclass方法
		一般来说cast是转型的意思,但是学java的时间也不短了,class类居然还有cast这个方法,这里来学习一下这个cast有何用. 第一次看到这个cast是在Spring的源码中, spring-f ... 
- java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重
		package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ... 
- Exception 的 toString() 方法和 getMessage() 方法的区别
		Exception 的 toString() 方法和 getMessage() 方法的区别: 在开发的过程中打印错误日志时尽量使用e.toString() 方法, 因为当错误为空指针时 e.getMe ... 
- StringBuffer类的delete()方法和deleteCharAt()方法的区别
		引言 StringBuffer类的delete()方法和deleteCharAt()方法都是用来删除StringBuffer字符串中的字符 区别 1.对于delete(int start,int en ... 
- 为什么要重写hashCode()方法和equals()方法及如何重写
		我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ... 
- hashCode()方法和equals方法的重要性。
		在Object中有两个重要的方法:hashCode()和equals(Object obj)方法,并且当你按ctrl+alt+s时会有Generator hashCode()和equals().我们不 ... 
随机推荐
- Spring Bean 管理
			1 Spring 工厂类 2 XML 方式 1.1 Bean 实例化的三种方式 无参构造方法 静态工厂方法 实例工厂方法 3 XML方式属性注入 4 注解方式 5 注解方式属性注入 
- 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
			比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能 对于机器学习的很多问题来说,计算的瓶颈往往在于大规模以及频繁的矩阵运算,主要在于以下两方面: (Dense/Sparse) Matr ... 
- 【神经网络与深度学习】Caffe Model Zoo许多训练好的caffemodel
			Caffe Model Zoo 许多的研究者和工程师已经创建了Caffe模型,用于不同的任务,使用各种种类的框架和数据.这些模型被学习和应用到许多问题上,从简单的回归到大规模的视觉分类,到Siames ... 
- Go语言入门篇-网络经验
			Go语言学习手册 golang*看云 golang圣经 wuYinIO 1.go语言开发中的坑 go新手容易犯的三个致命错误 Golang 需要避免踩的 50 个坑 2.go语言数据类型 map ... 
- Kick Start 2019 Round F Teach Me
			题目链接 题目大意 有 $N$ 个人,$S$ 项技能,这些技能用 $1, 2, 3, \dots, S$ 表示 .第 $i$ 个人会 $c_i$ 项技能($ 1 \le c_i \le 5 $).对于 ... 
- Minicom 简单使用
			一. 什么是minicom 1.1. minicom 是linux 下的一个串口调试工具 二. minicom的使用 2.1. 进入设置 sudo minicom -s 2.1.1. 串口设置 i. ... 
- %300为0的个数(牛客第四场)--	number
			题意: 给你一串数,问你如题. 思路: 我不是这样的作法,从后往前,先取00,再算%3==0的个数,往前推的时候有递推关系: #define IOS ios_base::sync_with_stdio ... 
- 最短meeting路线(树的直径)--牛客第四场(meeting)
			题意: 给你一棵树,树上有些点是有人的,问你选一个点,最短的(最远的那个人的距离)是多少. 思路: 其实就是树的直径,两遍dfs,dfs第二遍的时候遇到人就更新直径就行了,ans是/2,奇数的话+1. ... 
- redis 单线程的理解
			单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会 ... 
- Ansible PlayBook语法
			PlayBook语法实例 playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过Ansible中的tasks定义好的角色(play的内容被称为ta ... 
