资讯专栏INFORMATION COLUMN

13.java object类

wind3110991 / 1032人阅读

摘要:常用方法取的对象信息类的方法返回一个字符串,该字符串由类名对象是该类的一个实例标记符和此对象哈希码的无符号十六进制表示组成。方法返回的运行时类类型。至于同一个应用程序在不同执行期所得的调用结果,无需一致。

概念

object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来.

在定义一个类时,如果没有明确的继承一个父类的话,那么它继承的就是object类。

常用方法 取的对象信息:public String toString()

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、标记符“@”和此对象哈希码的无符号十六进制表示组成。
该方法用得比较多,一般子类都有覆盖。

public String toString(){
    return getClass().getName() + "@" + Integer.toHexString(hashCOde());
}

getClass()方法返回Object的运行时类类型。不可重写,要调用的话,一般和getName()联合使用,如getClass().getName();

示例

class Book{}
class A{
    public String toString(){
        return "A类重载的toString";
    }
}
public class testDemo {
    public static void main(String[] args) {
        Book b = new Book();
        String s = "hello";
        A a = new A();
        System.out.println(b);
        System.out.println(b.toString());
        System.out.println(s);
        System.out.println(a);
    }
}
输出结果:
Book@15db9742
Book@15db9742
hello
A类重载的toString

在进行对象输出的时候,输出操作会自动调用对象中的toString方法。Object类中的toString()方法为了适应所有对象的输出,所以只输出了对象的编码。

对象比较: public boolean equals(Object obj)

Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象.

public boolean equals(Object obj){
    return (this == obj)
}

该方法在开发中会经常使用到,如果要进行类的相等判断,一般要进行重写。

示例:

class Book{
    private String title;
    private double price;

    public Book(String title, double price){
        this.title = title;
        this.price = price;
    }

    public String toString(){
        return "书名:" + this.title + ",价格:" + this.price; 
    }

    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        if(obj == null){
            return false;
        }
        if(!(obj instanceof Book)){
            return false;
        }

        Book b = (Book) obj;
        if (this.title.equals(b.title) && this.price == b.price){
            return true;
        }else{
            return false;
        }
    }
}

public class testDemo {
    public static void main(String[] args) {
        Book b1 = new Book("java开发", 66.66);
        Book b2 = new Book("java开发", 66.66);
        Book b3 = new Book("java开发", 65.0);

        System.out.println(b1.equals(b2));
        System.out.println(b1.equals(b3));
        System.out.println(b1.equals("hello"));
    }
}
输出结果:
true
false
false
取的对象hash码:public int hashCode()

按照一定的算法由对象得到的一个数值,散列码没有规律。

public native int hashCode();

hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。

在 Java 中,对 hashCode 的规定如下:

在同一个应用程序执行期间,对同一个对象调用 hashCode(),必须返回相同的整数结果——前提是 equals() 所比较的信息都不曾被改动过。至于同一个应用程序在不同执行期所得的调用结果,无需一致。

如果两个对象被 equals() 方法视为相等,那么对这两个对象调用 hashCode() 必须获得相同的整数结果。

如果两个对象被 equals() 方法视为不相等,那么对这两个对象调用 hashCode() 不必产生不同的整数结果。

简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的 hashCode 值相同,它们并不一定相同。在 Java 规范里面规定,一般是覆写 equals() 方法应该连带覆写hashCode() 方法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73685.html

相关文章

  • Java问题汇总,持续更新到GitHub

    摘要:目录介绍问题汇总具体问题好消息博客笔记大汇总年月到至今,包括基础及深入知识点,技术博客,学习笔记等等,还包括平时开发中遇到的汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善开源的文件是格式的同时也开源了生活博客,从年 目录介绍 00.Java问题汇总 01.具体问题 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技...

    beita 评论0 收藏0
  • Java思想之容器implements与接口interface

    摘要:类似于中的事件驱动函数,当有事件发生时候,通过回调函数,通知主函数。一旦或内的某个函数触发了某个事件,就能通过监听接口发送给主函数,类似中的事件回调函数。父类与子类通过实现接口调用,此时即为父类本身。 http://homeway.me/ 0x01.About 查了一些国内资料,都说java中extended与implements的区别是,一个类只能有一个继承,一个类可...

    MockingBird 评论0 收藏0
  • java 对象内存大小

    摘要:一个对象内存有多大为什么想知道这个,自以为很重要,其实。参考链接对象解析不得不了解的对象头从开始在位系统上会默认开启压缩指针研究位引用指针压缩技术 java 一个对象内存有多大 为什么想知道这个,自以为很重要,其实 just for fun =。= 测试相关说明 jdk: java 官网上下载的,HotSpot 虚拟机 java version 1.8.0_121 Java(TM)...

    xiaokai 评论0 收藏0
  • Java入坑指南

    摘要:入坑指南是滴,下面是一个最低的入坑还应该有种设计模式应该掌握的。堆栈以帧为单位保存线程的状态,对堆栈的操作为压栈和出栈执行字节码以后,将会产生程序计数器和栈,程序计数器存放将要执行下一条指令的偏移量。 Java入坑指南是滴,下面是一个最低的入坑 还应该有23种设计模式应该掌握的。╮(╯▽╰)╭注意,第一个j是大写。 Java的特点跨平台,风格接近C++最重要的api文档 https:/...

    Rindia 评论0 收藏0
  • Java线程堆栈分析

    摘要:线程堆栈最擅长与分析如下类型问题系统无缘无故过高。性能瓶颈如无法充分利用等线程死锁死循环,饿死等。由于线程数量太多导致系统失败如无法创建线程等。注意死锁的两个或多个线程是不消耗的,有的人认为的使用率是线程死锁导致的,这个说法是完全错误的。 不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面。老话说得好,机会是留给有准备的人的,因此...

    jerry 评论0 收藏0

发表评论

0条评论

wind3110991

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<