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. Asp.net Core Session 存储任意对象

    using Microsoft.AspNetCore.Http; using Newtonsoft.Json; public static class SessionExtensions { publ ...

  2. Netty--【详解】

    Netty概述:1.netty是基于Java NIO的网络应用框架,client-server框架2.Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为一 ...

  3. Arduino_URO端口与AtMega328p引脚对应图

    Arduino微控制器的数字端口和模拟端口与ATMEGA 328芯片引脚的对应关系图如下.标有0~13标号的引脚对应的是数字端口,在0~13前面有符号“~”的引脚对应的端口具有PWM输出功能.标有A0 ...

  4. 如何对N个接口按比例压测

    随着微服务盛行,公司的服务端项目也越来越多.单一的接口性能测试并不能准确反映某个服务的总体处理能力,在服务功能划分比较清晰的架构下,对于某一服务的总体性能测试也相对变得简单.下面分享一个对于某个模块对 ...

  5. 基于 HTML5 + WebGL 的 3D 风力发电场

    前言    风能是一种开发中的洁净能源,它取之不尽.用之不竭.当然,建风力发电场首先应考虑气象条件和社会自然条件.近年来,我国海上和陆上风电发展迅猛.海水.陆地为我们的风力发电提供了很好地质保障.正是 ...

  6. vue兄弟组件传值——事件总线

    1.创建一个js文件,例如msg.js,放到合适位置,例如components中,或者其他位置也行.然后在兄弟两个组件中分别引入msg.js文件 msg.js: import Vue from 'vu ...

  7. VS2015发布WEB项目

    第一步:在打开的VS2015中,右击项目,在弹出的对话框中,点击“发布”. 第二步:配置发布的WEB项目. 1.为要发布的项目起个名称,一般和项目名称相同. 2.选择以文件系统发布. 3.设置相关配置 ...

  8. python如何计算程序(代码块)的运行时间?

    1.引入time模块 2.调用time模块的time()函数 :用来获取当前的时间,返回的单位是秒 # 引入一个time模块, * 表示time模块的所有功能, # 作用: 可以统计程序运行的时间 f ...

  9. 洛谷 p3834 主席树

    题目链接:https://www.luogu.org/problem/P3834 主席树求静态区间第k小 #include<iostream> #include<cstdio> ...

  10. jdbc实现批量提交rollback

    最近上了一个老项目,要修改一些业务,具体的思路是在jsp中实现对数据的某些批量操作,因此做一下笔记. 1.整体jdbc建立连接/关闭连接 conn = DbUtil.getConnection(); ...