博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java核心技术----Object类
阅读量:4662 次
发布时间:2019-06-09

本文共 6370 字,大约阅读时间需要 21 分钟。

package java.lang;/** * Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, * including arrays, implement the methods of this class. * * @author  unascribed * @see     java.lang.Class * @since   JDK1.0 */public class Object {    private static native void registerNatives();    static {        registerNatives();    }        public final native Class
getClass(); public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } protected native Object clone() throws CloneNotSupportedException; public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } public final native void notify(); public final native void notifyAll(); public final native void wait(long timeout) throws InterruptedException; public final void wait(long timeout, int nanos) throws InterruptedException { if (timeout < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos < 0 || nanos > 999999) { throw new IllegalArgumentException( "nanosecond timeout value out of range"); } if (nanos > 0) { timeout++; } wait(timeout); } public final void wait() throws InterruptedException { wait(0); } protected void finalize() throws Throwable { }}

Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来。

在Java中,只有基本类型不是对象(数组也都扩展了Object类)。

/** * Created by N3verL4nd on 2016/12/4. * Object类:所有类的超类 * Object类是不断抽取而来,具备着所有对象都具备的共性内容。 * 常用的共性内容: * equals toString hashCode clone  */class Person{	private int age;	public Person(int age){		this.age = age;	}}public class test {    public static void main(String... args) {        Person p1 = new Person(20);        Person p2 = new Person(20);        System.out.println(p1 == p2);        System.out.println(p1.equals(p2));    }}

输出:

false

false

equals比较的是两个对象是否指向同一个位置

重写equals方法:

/** * Created by N3verL4nd on 2016/12/4. * Object类:所有类的超类 * Object类似不断抽取而来,具备着所有对象都具备的共性内容。 * 常用的共性内容: * equals toString hashCode clone  */class Person{	private int age;	public Person(int age){		this.age = age;	}	//根据Person类的年龄进行比较	@Override	public boolean equals(Object obj){		if (!(obj instanceof Person)) {			throw new ClassCastException("类型错误");		}		Person p = (Person)obj;		return (age == p.age);	}}public class test {    public static void main(String... args) {        Person p1 = new Person(20);        Person p2 = new Person(21);        Person p3 = new Person(20);        System.out.println(p1 == p2);        System.out.println(p1.equals(p2));        System.out.println(p1.equals(p3));    }}

输出:

false

false
true

/** * Created by N3verL4nd on 2016/12/4. * Object类:所有类的超类 * Object类似不断抽取而来,具备着所有对象都具备的共性内容。 * 常用的共性内容: * equals toString hashCode clone  */class Person{	private int age;	public Person(int age){		this.age = age;	}	//根据Person类的年龄进行比较	@Override	public boolean equals(Object obj){		if (!(obj instanceof Person)) {			throw new ClassCastException("类型错误");		}		Person p = (Person)obj;		return (age == p.age);	}}public class test {    public static void main(String... args) {        Person p1 = new Person(20);        Person p2 = new Person(21);        Person p3 = new Person(20);        Demo demo = new Demo();        System.out.println(p1 == p2);        System.out.println(p1.equals(p2));        System.out.println(p1.equals(p3));        System.out.println("p1 = " + p1);        System.out.println("p1.hashCode() = " + p1.hashCode());        System.out.println("Integer.toHexString(p1.hashCode()) = " + Integer.toHexString(p1.hashCode()));    }}

输出:

false
false
true
p1 = Person@28d93b30
p1.hashCode() = 685325104
Integer.toHexString(p1.hashCode()) = 28d93b30
一般重写equals方法后都需要重写HashCode,因为相等的两个对象必须确保hashCode相等。

/** * Created by N3verL4nd on 2016/12/4. * Object类:所有类的超类 * Object类似不断抽取而来,具备着所有对象都具备的共性内容。 * 常用的共性内容: * equals toString hashCode clone  */class Person{	private int age;	public Person(int age){		this.age = age;	}	//根据Person类的年龄进行比较	@Override	public boolean equals(Object obj){		if (!(obj instanceof Person)) {			throw new ClassCastException("类型错误");		}		Person p = (Person)obj;		return (age == p.age);	}	@Override	public int hashCode(){		return age;	}}public class test {    public static void main(String... args) {        Person p1 = new Person(20);        Person p2 = new Person(21);        Person p3 = new Person(20);        Demo demo = new Demo();        System.out.println(p1 == p2);        System.out.println(p1.equals(p2));        System.out.println(p1.equals(p3));        System.out.println("p1 = " + p1);        System.out.println("p1.hashCode() = " + p1.hashCode());        System.out.println("Integer.toHexString(p1.hashCode()) = " + Integer.toHexString(p1.hashCode()));    }}

/** * Created by N3verL4nd on 2016/12/4. * Object类:所有类的超类 * Object类似不断抽取而来,具备着所有对象都具备的共性内容。 * 常用的共性内容: * equals toString hashCode clone  */class Person{	private int age;	public Person(int age){		this.age = age;	}	//根据Person类的年龄进行比较	@Override	public boolean equals(Object obj){		if (!(obj instanceof Person)) {			throw new ClassCastException("类型错误");		}		Person p = (Person)obj;		return (age == p.age);	}/*	@Override	public int hashCode(){		return age;	}*/}public class test {    public static void main(String... args) {        Person p1 = new Person(20);       	System.out.println(p1);       	System.out.println(p1.getClass().getName() + "@" + Integer.toHexString(p1.hashCode()));    }}
重写toString方法:

/** * Created by N3verL4nd on 2016/12/4. * Object类:所有类的超类 * Object类似不断抽取而来,具备着所有对象都具备的共性内容。 * 常用的共性内容: * equals toString hashCode clone  */class Person{	private int age;	public Person(int age){		this.age = age;	}	//根据Person类的年龄进行比较	@Override	public boolean equals(Object obj){		if (!(obj instanceof Person)) {			throw new ClassCastException("类型错误");		}		Person p = (Person)obj;		return (age == p.age);	}/*	@Override	public int hashCode(){		return age;	}*/	public String toString(){		return "Person@@" + age;	}}public class test {    public static void main(String... args) {        Person p1 = new Person(20);       	System.out.println(p1);       	System.out.println(p1.getClass().getName() + "@" + Integer.toHexString(p1.hashCode()));    }}

输出:

Person@@20

Person@28d93b30

转载于:https://www.cnblogs.com/lgh1992314/p/6616273.html

你可能感兴趣的文章
asp.net2.0导出pdf文件完美解决方案【转载】
查看>>
JavaWeb过滤器.监听器.拦截器-原理&区别(转)
查看>>
CentOS中yum安装ffmpeg
查看>>
2014ACM/ICPC亚洲区北京站题解
查看>>
logrotate命令
查看>>
C语言之字符、整数、数组、字符串笔记
查看>>
将tomcat设置在服务中为开机自动启动
查看>>
c#之使用单例模式实现数据库连接
查看>>
【JUC】JDK1.8源码分析之CopyOnWriteArraySet(七)
查看>>
editplus文本编辑器
查看>>
装饰器和闭包
查看>>
纸片折叠
查看>>
js类型判断:typeof与instanceof
查看>>
实验 8
查看>>
Django学习笔记--数据库中的单表操作----增删改查
查看>>
[洛谷P5075][JSOI2012]分零食
查看>>
第三次作业(第四次不要电梯了吧)
查看>>
mustache语法
查看>>
[Python] 怎么把HTML的报告转换为图片,利用无头浏览器
查看>>
WebGL之通过外部传入a_PontSize值改变点着色器vshader内置变量gl_PointSize的值
查看>>