搜索
首页Javajava教程Java Object类中的方法怎么用

Java Object类中的方法怎么用

Apr 18, 2023 pm 06:13 PM
javaobject

1. Object类介绍

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父 类。即所有类的对象都可以使用Object的引用进行接收。

范例:使用Object接收所有类的对象

class Person{}
class Student{}
public class Test {
    public static void main(String[] args) {
        function(new Person());
        function(new Student());
    }
    public static void function(Object obj) {
        System.out.println(obj);
    }
}
//执行结果:
Person@1b6d3586
Student@4554617c

所以在开发之中,Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法。如下:

Java Object类中的方法怎么用

这里介绍其中的三个方法: toString()方法,equals()方法,hashcode()方法

2. 重写toString方法打印对象

当我们想要打印对象中的内容,可以通过重写Object类当中的toString方法来实现!

下面解释为什么要重写toString()方法

下面的代码想要打印一个 Person 对象:

public class Person {
    String name;
    String gender;
    int age;
    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;

    }
    public static void main(String[] args) {
        Person person = new Person("Jim","男", 18);
        System.out.println(person);
    }
}

看执行结果打印出来并不是对象的具体内容

Java Object类中的方法怎么用

这里观察println的方法源码,在源码中是调用了String类中的valueOf方法,在跳转到valueOf处的源码可以发现方法体中实际上是又调用了toString方法,

Java Object类中的方法怎么用

此时再看toString当中的具体实现,

Java Object类中的方法怎么用

getClass().getName() 返回此 Object 的运行时类(Class),并且以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void )名称

hashCode() 方法返回的是"地址"

Integer.toHexString(hashCode()) 获取此对象的哈希码值(int类型),并且使用包装类 Integer 类,将此int类型的哈希码值,转换为以十六进制无符号整数,并将转换后十六进制的整数以字符串的形式表示

所以说输出函数println在底层是调用toString实现的,想要实现打印对象的具体内容,只要按我们自己的想法重写Object类中的toString方法即可

public class Person {
    String name;
    String gender;
    int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }

    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;

    }
    public static void main(String[] args) {
        Person person = new Person("xin","男", 21);
        System.out.println(person);
    }
}

执行结果:

Java Object类中的方法怎么用

3. 对象比较equals方法

在Java中,==进行比较时:

  • 如果==左右两侧是基本类型变量,比较的是变量中值是否相同

  • 如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同

如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比较的,下面是equals方法的源码:

Java Object类中的方法怎么用

对象的比较代码实例:

class Person{
    private String name ;
    private int age ;
    public Person(String name, int age) {

        this.age = age ;
        this.name = name ;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false ;
        }
        if(this == obj) {
            return true ;
        }
        //不是Person类对象
        if (!(obj instanceof Person)) {
            return false ;
        }
        Person person = (Person) obj ; // 向下转型,比较属性值
        return this.name.equals(person.name) && this.age==person.age ;
    }

}

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("xin", 20);
        Person p2 = new Person("xin", 20);
        Person p3 = new Person("rong", 21);

        System.out.println(p1.equals(p2));
        System.out.println(p1.equals(p3));

    }
}

执行结果:

Java Object类中的方法怎么用

4. hashCode方法

hashcode方法用来确定对象在内存中存储的位置是否相同

在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

hashCode方法源码:

Java Object类中的方法怎么用

该方法是一个native方法,底层是由C/C++代码写的;编译器中是无法进行观察的。

我们认为两个名字相同,年龄相同的对象,是同一个对象,应该存储在同一个位置

看下面给出的代码,没有重写hashCode()方法,两个对象具有相同的内容,但得出的 的hash值不一样 :

class Person {
    public String name;
    public int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class TestDemo4 {
    public static void main(String[] args) {
        Person per1 = new Person("xin", 21) ;
        Person per2 = new Person("xin", 21) ;
        System.out.println(per1.hashCode());
        System.out.println(per2.hashCode());
    }
}

执行结果:

Java Object类中的方法怎么用

所以,如果我们希望认为两个对象具有相同的内容,其在内存中的位置应该是相等的,就需要重写hashCode()方法。

import java.util.Objects;

class Person {
    public String name;
    public int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

public class TestDemo4 {
    public static void main(String[] args) {
        Person per1 = new Person("xin", 21) ;
        Person per2 = new Person("xin", 21) ;
        System.out.println(per1.hashCode());
        System.out.println(per2.hashCode());
    }
}

执行结果:

Java Object类中的方法怎么用

以上是Java Object类中的方法怎么用的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具