1.9(java学习笔记)object类及toString()与equals()方法
object类
java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类。
例如 class Person {......};和class Person extends Object{......}是一样的。如果我们的Studdent继承了Person类,继承结构就应该是

这时大家可能会想,为什么要默认继承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()方法的更多相关文章
- Object类的toString()和equals()方法
我们知道,Object类是所有类的父类,因此也被称为根类.祖先.那么,我们就来看一看Object类的最常用的两个方法是如何用的. 1.toString方法: Object类的toString()方法默 ...
- Object类的toString和Equals方法,以及Objects类的Equals方法
Object类 toString()方法 public class Person { private String name; private int age; public Person() { } ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- Java SE学习笔记 --->高级类特性 ---> toString() 方法
概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...
- java继承,final,super,Object类,toString,equals,
Java中的内部类:成员内部类静态内部类方法内部类匿名内部类 内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可 ...
- Java中的Object类的toString()方法,equals()方法
Object类是所有类的父类,若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法: 1.toString 如果输出一个对象的时候 ...
- Java学习笔记 04 类和对象
一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...
- Java学习笔记-枚举类
实例有限且固定的类成为枚举类 枚举类的实现 早期时候的实现形式: public static final int SEASON_SPRING = 1; public static final int ...
随机推荐
- socket编程 ------ BSD socket API
伯克利套接字(Berkeley sockets),也称为BSD Socket.伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信. BSD Socket的应用 ...
- Git菜鸟
1.git 和svn的差异 git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式.如果不习惯用代码管理工具,可能比较难理解分布式管理和集中式管理的概念.下面介绍两种工具的工 ...
- 大数问题,通常用JAVA
e.g. HDU1002 简单加法 import java.math.BigInteger; import java.util.Scanner; public class Main { public ...
- SDK登录cognos
通过SDK登录cognos 一种是拼xml,如这里的实现https://github.com/cosysoft/cognos-tools/blob/master/src/com/ibm/cognos/ ...
- bzoj 1067 特判
这道题的大题思路就是模拟 假设给定的年份是x,y,首先分为4个大的情况,分别是 x的信息已知,y的信息已知 x的信息已知,y的信息未知 x的信息未知,y的情况已知 x的信息未知,y的情况未知 然后对于 ...
- hashlib模块加密用法
hashlib 加密模块 hashlib.md5() 构建一个md5的对象,用于调用对象的update方法去加密 例子: import hashlib hash = hashlib.md5() h ...
- linux 系统函数之 (dirname, basename)【转】
转自:http://blog.csdn.net/peter_cloud/article/details/9308333 版权声明:本文为博主原创文章,未经博主允许不得转载. 除非你的原件考虑跨平台. ...
- SQL--相关子查询 与 非相关子查询
SQL 子查询可以分为相关子查询 与 非相关子查询. 假设Books表如下: 类编号 图书名 出版社 价格 ---------------------------------------------- ...
- javascript三种嵌入方式
什么是JavaScript? JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互,JavaScript是浏览器解释执行的. J ...
- 搜索引擎--范例:谈谈django--mysql数据库的一些常用命令
现在基本没有什么能离得开数据库了,django我一直用的都是mysql的数据库,这次和大家说说django--mysql数据库的一些常用命令吧 1:命令行登陆mysql C:\Users\Admini ...