Java基础教程——Object类
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类的更多相关文章
- Java基础:Object类中的equals与hashCode方法
前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象 对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...
- Java基础之Object类
类Object是类层次结构的根类.每个类都直接或者间接地继承Object类.所有对象(包括数组)都实现这个类的方法.Object类中的构造方法只有一个,并且是无参构造方法,这说明每个类中默认的无参构造 ...
- Java基础教程(10)--类
一.声明类 你已经见过了以如下方式定义的类: class MyClass { // field, constructor, and method declarations } 上面是声明类的最 ...
- Java基础教程——Date类和Calendar类
Date类和Calendar类都是关于日期的类,都在java.util包中,使用时需要import. Date java.util.Date类的对象用来表示时间和日期,用得最多的是获取系统当前日期和时 ...
- Java基础教程——System类
System类 java.lang.System类代表当前Java程序的运行平台. |-可以做输入输出,垃圾回收:(此处不讲) |-可以获取时间: |-可以获取环境变量: |-可以获取系统信息: |- ...
- Java基础教程——String类
String类 Java程序中的所有字符串字面值(如 "abc" )都是String的实例 字符串是常量(因为 String 对象是不可变的,所以可以共享) 字符串的本质是字符数组 ...
- Java基础教程——File类、Paths类、Files类
File类 File类在java.io包中.io代表input和output,输入和输出. 代表与平台无关的文件和目录. 可以新建.删除.重命名,但不能访问文件内容. File类里的常量: impor ...
- Java基础教程——BigDecimal类
BigDecimal类 float.double类型的数字在计算的时候,容易发生精度丢失. 使用java.math.BigDecimal类可以解决此类问题. 前面讲过Math类,现在的BigDecim ...
随机推荐
- web worker的介绍和使用
目录 简介 Web Workers的基本概念和使用 Web Workers的分类 worker和main thread之间的数据传输 简介 什么是web worker呢?从名字上就可以看出,web w ...
- uniapp微信小程序获取当前用户手机号码(前端)
按钮触发获取用户信息 uniapp中与微信小程序官网所写会不同, <button open-type="getPhoneNumber" @getphonenumber=&qu ...
- uniapp微信授权操作后事件不触发
微信小程序官网代码 <button form-type="submit" open-type="getUserInfo" bindgetuserinfo= ...
- 释放至强平台 AI 加速潜能 汇医慧影打造全周期 AI 医学影像解决方案
基于英特尔架构实现软硬协同加速,显著提升新冠肺炎.乳腺癌等疾病的检测和筛查效率,并帮助医疗科研平台预防"维度灾难"问题 <PAGE 1 LEFT COLUMN: CUSTOM ...
- 分布式文档存储数据库之MongoDB访问控制
上一篇博客主要聊了下mongodb的分片机制以及分片集群的搭建,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13958295.html:今天我们来了解下mon ...
- 2012年游戏软件开发独立本科段01B0815自考科目
01B0815自考科目 课程代码[学分] 课程名称 03708[02] 中国近现代史纲要 03709[04] 马克主义基本原理概论 03684[10] 综合英语(四) 01042[05] 应用数学 0 ...
- IP 层收发报文简要剖析2--ip报文的输入ip_local_deliver
ip报文根据路由结果:如果发往本地则调用ip_local_deliver处理报文:如果是转发出去,则调用ip_forward 处理报文. 一.ip报文转发到本地: /* * Deliver IP Pa ...
- ceph的pg的分布的快速查看
前言 本篇的内容实际上是另外一篇文章的字篇章,在另外一篇文章当中,将会对crush的分布的调整的做一次总结,用比较简单的方式来展示各种crush的区别 在做这个工作过程中,为了更好的能展示出效果,就有 ...
- Ceph如何实现文件系统的横向扩展
前言 在跟一个朋友聊天的时候,聊到一个技术问题,他们的一个环境上面小文件巨多,是我目前知道的集群里面规模算非常大的了,但是目前有个问题,一方面会进行一倍的硬件的扩容,而文件的数量也在剧烈的增长着,所以 ...
- rbd的image快照与Pool快照
前言 这个问题是不久前在ceph社区群里看到的,创建image的时候,当时的报错如下: 2016-12-13 23:13:10.266865 7efbfb7fe700 -1 librbd::image ...