Object类

Object类是Java所有类类型的父类(或者说祖先类更合适)

《Thinking in Java(Java编程思想)》的第一章名字就叫“everything is Object”,一切皆为对象。


toString()方法:自我描述

任何类,都默认继承Object,所以都有toString()方法:

public class Test {
public static void main(String[] args) {
Test a = new Test();
System.out.println(a.toString());
System.out.println(a);
}
}

我们在打印一个对象时,默认就调用了这个类的toString()方法,即使这个类的定义中没有toString()的代码,也会从Object中继承这个方法。


Object类中toString()方法的定义为:

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

默认得到的字符串是“类名@hashCode”。

hashCode是一个计算出来的值,有些地方说这个是对象的地址,这种说法不严谨,但问题不大。

可以不严谨地认为这个字符串代表了对象的地址。

重写toString,实现自定义的“自我描述”

class Person {
public Person(String name) {
this.name = name;
}
private String name;
@Override
public String toString() {
return getClass().getName() + "{" + name + "}";
}
}
public class TestToString {
public static void main(String[] args) {
Person a = new Person("孙行者");
System.out.println(a.toString());
}
}

结果:

Person{孙行者}

实际应用举例:

toString()可以自动生成:点击鼠标右键→source→Generate toString()

public class Monkey {
private int id;
private String type;
private String name;
// 访问器略
@Override
public String toString() {
return "Monkey [id=" + id + ", type=" + type + ", name=" + name + "]";
}
}

equals方法和==

Object类中的equals方法和==运算符没有区别(两个对象引用相等才认为相等):

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

String类重写了equals方法,所以内容相等就判为相等。

具体参见String章节

自定义类时,可以重写equals方法,提供自定义的判等标准:

// 例:两个类name相同,即认为相等
public class TestOverwriteEquals {
public static void main(String[] args) {
Food f1 = new Food("大米");
Food f2 = new Food("大米");
System.out.println("==:" + (f1 == f2));
System.out.println("equals:" + f1.equals(f2));
}
}
class Food {
public Food(String name) {
this.name = name;
}
private String name;
@Override
public boolean equals(Object obj) {
if (obj != null && obj.getClass() == Food.class) {
Food f = (Food) obj;
if (f.name.equals(this.name)) {
return true;
}
}
return false;
}
}

运行结果

==:false
equals:true

Java基础教程——Object类的更多相关文章

  1. Java基础:Object类中的equals与hashCode方法

    前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象   对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...

  2. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  3. Java基础之Object类

    类Object是类层次结构的根类.每个类都直接或者间接地继承Object类.所有对象(包括数组)都实现这个类的方法.Object类中的构造方法只有一个,并且是无参构造方法,这说明每个类中默认的无参构造 ...

  4. Java基础教程(10)--类

    一.声明类   你已经见过了以如下方式定义的类: class MyClass { // field, constructor, and method declarations }   上面是声明类的最 ...

  5. Java基础教程——Date类和Calendar类

    Date类和Calendar类都是关于日期的类,都在java.util包中,使用时需要import. Date java.util.Date类的对象用来表示时间和日期,用得最多的是获取系统当前日期和时 ...

  6. Java基础教程——System类

    System类 java.lang.System类代表当前Java程序的运行平台. |-可以做输入输出,垃圾回收:(此处不讲) |-可以获取时间: |-可以获取环境变量: |-可以获取系统信息: |- ...

  7. Java基础教程——String类

    String类 Java程序中的所有字符串字面值(如 "abc" )都是String的实例 字符串是常量(因为 String 对象是不可变的,所以可以共享) 字符串的本质是字符数组 ...

  8. Java基础教程——File类、Paths类、Files类

    File类 File类在java.io包中.io代表input和output,输入和输出. 代表与平台无关的文件和目录. 可以新建.删除.重命名,但不能访问文件内容. File类里的常量: impor ...

  9. Java基础教程——BigDecimal类

    BigDecimal类 float.double类型的数字在计算的时候,容易发生精度丢失. 使用java.math.BigDecimal类可以解决此类问题. 前面讲过Math类,现在的BigDecim ...

随机推荐

  1. STM32入门系列-学习STM32要掌握的内容

    STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...

  2. STM32移植FreeRTOS(1)

    "STM32F103VET6<_>FreeRTOS" 1.项目功能实现 1)LED灯定时闪烁 2)KEY按键检测 3)FreeRTOS任务创建 4)串口输出程序运行状态 ...

  3. Flask简介与启动服务器

    Flask 一.简介 官方文档:http://flask.pocoo.org/ http://www.pythondoc.com/flask/index.html(中文) 1.概述 flask是一个非 ...

  4. git使用心得体会

    序言:身为软件工程的学生却一直没有接触Git,实在有些羞愧.得益于孟宁老师的课程,让我对Git有了初步的认识.同样借由此次机会正式接触Git这款程序员必备工具. 参考文献:https://mp.wei ...

  5. ubuntu 18.04 安装anaconda

    ubuntu 安装anaconda 4版本 为了学习 tensorflow python3.5 版本 使用anaconda 安装: https://mirrors.tuna.tsinghua.edu. ...

  6. R-C3D:用于时间活动检测的区域3D网络

    论文原称:R-C3D: Region Convolutional 3D Network for Temporal Activity Detection(2017) 主要贡献: 1.提出一个包括活动候选 ...

  7. leetcode37:path-sum-ii

    题目描述 给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径, 例如: 给出如下的二叉树,sum=22,     5     / \   4  8   /    / ...

  8. C语言利用结构体数组实现学生成绩管理系统

    这篇文章主要为大家详细介绍了C语言利用结构体数组实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 要求: 某班有最多不超过30人(具体人数由键盘输入) ...

  9. 消息队列--ActiveMQ集群部署

    一.activeMQ主要的部署方式? 1,默认的单机部署(kahadb) activeMQ默认的存储单机模式,如果配置文件不做修改,则默认使用此模式.以本地的kahadb文件的方式进行存储,性能完全依 ...

  10. linux中配置yum文件

    yum简介:yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决. yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是 ...