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

java核心技术----Object类的更多相关文章

  1. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  2. Java之Object类和常用的API

    Object类和常用的API 学习过程中的笔记,涉及到Objetc中的equals方法和toString方法,日期类Date,日历类Calendar,日期格式化类SimpleDateFormat以及基 ...

  3. Java中Object类hashCode的底层实现

    Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...

  4. Java 之 Object 类

    一.Object 概述  java.lang.Object 类是 Java 语言中的根类,即所有类的父类. 在对象实例化的时候,最终找的父类就是 Object. 如果一个类没有特别指定父类,那么默认则 ...

  5. Java之Object类用法总结

    Object类概述: 1.Object类是所有Java类的根父类. 2.如果在类的声明中未使用extends关键字指明其父类, 则默认父类为java.lang.Object类. Object类主要结构 ...

  6. java.lang.Object类与equals()及toString()的使用

    1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Object类中的功能(属性.方法)就具有通用 ...

  7. 深入研究java.lang.Object类

    前言:Java的类库日益庞大.所包括的类和接口也不计其数.但当中有一些非常重要的类和接口,是Java类库中的核心部分.常见的有String.Object.Class.Collection.ClassL ...

  8. java之Object类介绍

    1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 p ...

  9. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

随机推荐

  1. Django常用字段及参数、事务、数据库查询优化

    常用字段 注意: Django中没有设置对应char类型的字段,但可以支持自己定义. 自定义对应于数据库的char类型字段: from django.db.models import Field cl ...

  2. BFS小记

    题目:求从S走到G点所需步数 #S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#......#### ...

  3. es lucene搜索及聚合流程源码分析

    本文以TermQuery,GlobalOrdinalsStringTermsAggregator为例,通过代码,分析es,lucene搜索及聚合流程.1:协调节点收到请求后,将search任务发到相关 ...

  4. cannot mount volume over existing file, file exists /var/lib/docker/overlay2/.../merged/usr/share/zoneinfo/UTC 解决

    问题产生原因: linux系统docker-compose.yml文件 放到 mac本启动发现启动报错 cannot mount volume over existing file, file exi ...

  5. python中end=''

    end = ''  用于连接下一条的print输出内容 效果图: 代码: # end='' 用于连接下一条输出语句 print('哈哈哈') print('嘻嘻嘻') print('\n\n') pr ...

  6. axios全局引用

    在vue项目开发中,我们使用axios进行ajax请求,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from ...

  7. java: integer number is too large

    今天想定义一个类常量,结果如下面那样定义,确报错了.error is: Integer number too large public static final Long STARTTIME = 14 ...

  8. SQLiteOpenHelperde的oncreate方法

    main中

  9. PageHelper踩坑

    刚开始死活分不了页,只显示默认的前 10条.搞了一下午,打了无数个断点都试不出毛病在哪. 下班又死磕到快8点,就在我已经绝望的时候,最后终于试出来了,把page.getTotal()给传到前端就好了. ...

  10. Python基础————文件操作

    文件操作 4.1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') # 表示要干嘛 读 还是写 obj.write() #写什么内容 obj.read() ...