1.9(java学习笔记)object类及toString()与equals()方法

时间:2022-01-05 09:21:08

object类

java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类。

例如 class Person {......};和class Person extends Object{......}是一样的。如果我们的Studdent继承了Person类,继承结构就应该是

1.9(java学习笔记)object类及toString()与equals()方法

这时大家可能会想,为什么要默认继承object类,把objec类作为公共的父类有什么用?

object类作为公共的父类,那么所有的子类都可以调用Object类中的方法。

下列结束两个Object类中的方法

1.toString

我们看下列代码

 package TestObject;

 public class Person {
public static void main(String[] args){
Student stu1 = new Student();
System.out.println(stu1);
System.out.println(stu1.toString());
} } class Student extends Person{
void study(){
System.out.println("学习中...");
}
}
运行结果:
TestObject.Student@15db9742
TestObject.Student@15db9742

我们会发现运行的结果是一样的。我们在来看看object中toString()f方法的源码

 public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

前面是获取名称,后面是获取地址。

这个方法是Object类中的,是所有子类的公共父类,所以我们可以通过重写toString()方法来达到我们需要的功能。

 package TestObject;

 public class Person {
String name = "hcf";
public static void main(String[] args){
Student stu1 = new Student();
System.out.println(stu1);
System.out.println(stu1.toString());
} } class Student extends Person{
void study(){
System.out.println("学习中...");
}
public String toString(){
return name;
}
}
运行结果:
hcf
hcf

这样我们就重写了Object类中的toString()方法。

2.equals()

我们先看下object类中的equals()方法源码

 public boolean equals(Object obj) {
return (this == obj);

可以看出,这个比较是直接比较地址值是否相等。

我们实际使用时可能认为,两个对象的内容相同就是相同的对象,可这时使用equals比较会出问题。因为对象的内容相同,但它们的存放地址是不同的,即不同的地址存放着相同的内容。

这是我就需要重写object类中equals方法,改写成对象的内容相同就代表它们相同。

下面是重写之后的equals方法。

 package TestObject;

 public class Person {
String name = "hcf";
public static void main(String[] args){
Student stu1 = new Student();
Student stu2 = new Student();
System.out.println(stu1 == stu2);
System.out.println(stu1.equals(stu2));
}
} class Student extends Person{
void study(){
System.out.println("学习中...");
}
public String toString(){
return name;
} @Override //加上这个标记代表重写了该方法。
public boolean equals(Object obj) { //因为Object是所有对象的父类,所以可以使用Object来接受任意类型的对象,便于操作。
if(this == obj) //首先判断两个对象地址是否相同,地址相同则肯定是相同对象。
return true;
if(!(obj instanceof Student)) //然后在判断两个是不是同一类,如果类不想同,则不同。
return false;
Student stu = (Student)obj; //先将obj强制转型成Student,然后一个一个属性区比较
if(stu.name.equals(this.name)) //此时的equals是String类中的方法,作用是比较字符的内容是否相同。
return true; //stu.name是String形式,所以调用的是String中的equals方法,
else //String中也重写了equals方法,作用是比较字符串内容是否相等。
return false;
} }

object类中一些方法我们会根据自己需要来重写。

1.9(java学习笔记)object类及toString()与equals()方法的更多相关文章

  1. Object类的toString()和equals()方法

    我们知道,Object类是所有类的父类,因此也被称为根类.祖先.那么,我们就来看一看Object类的最常用的两个方法是如何用的. 1.toString方法: Object类的toString()方法默 ...

  2. Object类的toString和Equals方法,以及Objects类的Equals方法

    Object类 toString()方法 public class Person { private String name; private int age; public Person() { } ...

  3. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  4. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  5. Java SE学习笔记 --->高级类特性 ---> toString() 方法

    概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...

  6. java继承,final,super,Object类,toString,equals,

    Java中的内部类:成员内部类静态内部类方法内部类匿名内部类 内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可 ...

  7. Java中的Object类的toString()方法,equals()方法

    Object类是所有类的父类,若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法: 1.toString 如果输出一个对象的时候 ...

  8. Java学习笔记 04 类和对象

    一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...

  9. Java学习笔记-枚举类

    实例有限且固定的类成为枚举类 枚举类的实现 早期时候的实现形式: public static final int SEASON_SPRING = 1; public static final int ...

随机推荐

  1. github-创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  2. ext.net与extjs的关系

    一.在客户端,ext.net中可以使用extjs的语法. 如发送ajax请求, Ext.Ajax.request({            url: 'Common/getNode',         ...

  3. 【BZOJ-4523】路由表 Trie树 + 乱搞

    4523: [Cqoi2016]路由表 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 155  Solved: 98[Submit][Status][ ...

  4. 8 个最棒的 .NET 开发相关工具

    本文向你介绍 8 款跟 .NET 开发相关的一些工具. 1) Open Source – Sharp Develop SharpDevelop是一个用于开发C#或者VB.NET项目而设计的一个编辑器, ...

  5. The Separator in Grid_BFS

    Description Given a connected, undirected graph G = (V, E), where V is the vertex set consisting a c ...

  6. POJ 3373 Changing Digits 好蛋疼的DP

    一開始写的高位往低位递推,发现这样有些时候保证不了第四条要求.于是又開始写高位往低位的记忆化搜索,又发现传參什么的蛋疼的要死.然后又发现高位開始的记忆化搜索就是从低位往高位的递推呀,遂过之. dp[i ...

  7. 为什么要使用消息认证码(MAC)而非对称密钥?

    问题: 看了消息认证码的介绍后,小丽心想"如果用对称密码将消息加密后再发送的话,是不是就不需要消息认证码了呢?"原因有下: 1.对称密码的密文只有使用和加密时相同的密钥才能正确解密 ...

  8. MySQL集合操作类型

    SQL语言包含3个集合操作符(union.intersect.expect)以执行各种集合操作. 此外,每个集合操作符可以有两种修饰符:一个表是包含重复项,另一个表是去除重复项(但不一定时所有的重复项 ...

  9. 第四次作业之jieba库的应用

    #!/usr/bin/python# -*- coding:utf-8 -*- import imp,sys imp.reload(sys)from matplotlib.font_manager i ...

  10. IIS--互联网信息服务

    IIS--互联网信息服务 1.IIS是微软出品的一个服务器插件 2.IIS的功能:1)发布web网站 2)发布ftp站点 WEB服务器:1.监听TCP80端口 --- http://www.baidu ...