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()方法的更多相关文章

  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. 使用e.target.dataset的问题

    在微信开发中我们经常会用到标签中属性的属性值,有时候我们通过 data-* 和 e.target.dateset 来获取属性值会出现一点小bug,即是调用出来的数据是undefined. 1)方案1– ...

  2. ORACLE中根据生日得到年龄

    create or replace function F_GETAGE(dateofbirth date) return varchar2 is begin ) then ); else ) then ...

  3. DP---背包问题

    http://www.hawstein.com/posts/dp-knapsack.html http://www.cnblogs.com/wwwjieo0/archive/2013/04/01/29 ...

  4. [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树

    题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...

  5. bzoj 1251 裸splay

    裸的splay,只需要注意 max[-1]:=-maxlongint 就行了,否则在update的时候子节点的 max值会在max[-1]里选 /*************************** ...

  6. Linux make命令详解

    在linux环境下的工作,免不了需要经常编译C/C++源代码,所以make命令是我们经常都会用到的.当然make工具不一定针对C代码,它也可以维护其他各种代码,详见:man make    在列举其详 ...

  7. linux基础编程 套接字socket 完整的服务器端多线程socket程序【转】

    转自:http://blog.csdn.net/ghostyu/article/details/7737203 此段程序来自我的一个项目中,稍微做了些修改,运行稳定,客户端程序比较简单所以未编写,可以 ...

  8. android ARM 汇编学习 —— hello world

    android ARM 汇编学习—— 在 android 设备上编译c/cpp代码并用objdump/readelf等工具分析 adb putty 连上手机,用busybox vi 写一个 hello ...

  9. C#中文乱码转换

    string text="中文";string keyword;byte[] buffer= Encoding.UTF8.GetBytes(text);keyword=Encodi ...

  10. Oracle基础 11 约束 constraints

    --主.外键约束 create table t(  id int primary key); create table t1(  id int references t(id)); 或者create ...