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 ...
随机推荐
- 谈谈Android项目框架的前世今生
嗨,大家好,今天出了大太阳,真是美好的开始. 这篇文章和大家说说Android届流行的三大框架,了解下架构的前世今生,以及我对于这些框架的一些认识和看法. 三大框架区别 MVC 架构介绍 Model: ...
- CodeForces 916D Jamie and To-do List
题意 你需要维护一个任务列表,有 \(q\) 次操作,每次操作形如以下四种: set a x:设置任务 \(a\) 的优先级为 \(x\),如果任务列表中没有 \(a\) 则加进来. remove a ...
- Vue+Antd搭配百度地图实现搜索定位等功能
前言 最近,在做vue项目的时候有做到选择地址功能,而原项目中又引入了百度地图,所以我就打算通过使用百度地图来实现地址搜索功能啦. 本次教程可能过于啰嗦,所以这里先放上预览地址供大家预览--点我预览, ...
- Python爬虫练习(多线程,进程,协程抓取网页)
详情点我跳转 关注公众号"轻松学编程"了解更多. 一.多线程抓取网页 流程:a.设置种子url b.获取区域列表 c.循环区域列表 d.创建线程获取页面数据 e.启动线程 impo ...
- [Luogu P1066] 2^k进制数 (组合数或DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1066 Solution 这是一道神奇的题目,我们有两种方法来处理这个问题,一种是DP,一种是组合数. 这 ...
- 前端之旅一:vscode调试web配置
vscode调试web配置 第一步:安装vscode,并启动(vscode的安装包自行到其官网上下载) 第二步:在vscode上安装chrome插件 第三步:配置,启动调试 配置信息 { // Use ...
- 浅谈querySelector和getElementById之间的区别
前言: 最近学到前端一些知识,看到很多视频上许多老师都用的是querySelector而部分老师用的是getElementById,我就很疑惑,这两有啥区别,都是选择器,于是百度了一下明白了,quer ...
- R语言删除不规范的值(或NA)
在使用R语言处理表格时(xlsx, csv),有时里面含有缺失值,或者不规范的数值,比如下图有许多的问号"?",为了便于处理数据,这些都应该整行地删掉. 为了删掉那些包含" ...
- Java—字符流
一.字符流 字符流概述: 在操作过程中字节流可以操作所有数据,操作的文件中有中文字符,并且需要对 中文字符做出处理 二.字符编码表 文字-->(数字):编码."abc".ge ...
- 弹性盒模型flex-grow的计算
flex-grow属性是弹性盒布局模块的子属性. 它定义了弹性项目在必要时增长的能力. 它接受作为比例的无单位值. 它决定了项目应在伸缩容器内部占用多少可用空间. 例如,如果所有项目的flex-gro ...