Object类
面向对象的核心思想:“找合适的对象,做适合的事情”。
合适的对象:
自己描述类,自己创建对象。
sun已经描述了好多常用的类,可以使用这些类创建对象。
API(Application Program Interface)
sun定义的那么多类的终极父类是Object,任何一个类都继承了Object类。
Object描述的是所有类的通用属性与方法。
一、Object类常用方法
1.toString()
toString() 返回对象的描述信息 :
java.lang.Object@de6ced 类名@哈希码值的十六进制形式。
此描述信息不能直观的展示对象的信息,
父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。
重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的数据格式。
package com.hcx;class Person { String name; int age; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } }class Demo{ public static void main(String[] args) { Person p = new Person(); System.out.println(p);//com.hcx.Person@15db9742 } }
重写toString方法,按照想要的格式输出person的信息
package com.hcx;class Person { String name; int age; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return this.name+"-"+this.age; } }class Demo{ public static void main(String[] args) { Person p = new Person("hcx",23); System.out.println(p);//hcx-23 } }
2.equals(Object obj)
用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
重写equals方法:
Object的equals方法默认比较的是两个对象的内存地址,目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合现在的需求。
@Override public boolean equals(Object obj) { Person p = (Person)obj; return this.id== p.id; }
3.hashCode()
返回该对象的哈希码值:采用操作系统底层实现的哈希算法。
同一个对象的哈希码值是唯一的。
java中的规范:一般重写了一个类的equals方法,我们都会重写它的hashCode方法。
如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。
class Person{ int id; String name; public Person(int id, String name) { this.id = id; this.name = name; } public Person() { } @Override public String toString() { return "编号:"+ this.id + " 姓名:"+this.name; } //为什么要重写:Object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合我现在的需求。 @Override public boolean equals(Object obj) { Person p = (Person)obj; return this.id== p.id; } @Override public int hashCode() { return this.id; } }
直接输出一个对象的时候和输出对象的toString方法返回的字符串结果是一样的:
直接输出一个对象的时候,实际上在println方法内部会调用这个对象的toString方法,把toString方法返回的内容输出。
public class Demo{ public static void main(String[] args) { /* Object o = new Object(); System.out.println(o.toString()); // java.lang.Object@18b3364 返回的字符串表示: 完整类名+@+ 对象的哈希码 //直接输出一个对象的时候,实际上在println方法内部会调用这个对象的toString方法,把toString方法返回的内容输出。 System.out.println(o); // java.lang.Object@18b3364 Person p1 = new Person(110,"小红"); System.out.println("p1:"+p1); //如果我们能够输出一个p对象的时候,输出的格式: 编号:110 姓名: 小红.. Person p2 = new Person(112,"小明"); System.out.println("p2:"+p2); */ Person p1 = new Person(110,"小红"); Person p2 = new Person(110,"小明"); //需求:在现实生活中只要两个人的身份证一致,那么就是同一个人。 System.out.println("p1与p2是同一个对象吗?"+ p1.equals(p2)); System.out.println("p1哈希码:"+ p1.hashCode()); System.out.println("p2哈希码:"+ p2.hashCode()); } }
作者:JS_HCX
链接:https://www.jianshu.com/p/8849ccb7d3a8
共同学习,写下你的评论
评论加载中...
作者其他优质文章