首页 > 作文

java中Object类4种方法详细介绍

更新时间:2023-04-04 13:52:47 阅读: 评论:0

目录
object(四大方法):hashcode()方法:equals()方法:getclass()方法:tostring()方法:总结

object(四大方法):

文章干货满满,耐性看完~~
何为object?
首先先来看看官方对object的介绍:
在这里附上java官方的查阅工具:/d/file/titlepic/index.html style="text-align:center">

由官方介绍可见,object属于java.lang包内的一个类,而且提供了很多种方法, object 是类层次结构的根类。每个类都使用 object 作为超类。所有对象(包括数组)都实现这个类的方法。简单的说object类就是所有类的父类,包括我们所写的类,我们在使用类的时候就会利用object类中的方法,之所以我们在日常学习和开发中见不到object这个类,是因为所有的父类都自动的继承了这个类,并且拥有object类的所有方法,并且可以对这些方法进行重写,达到我们的业务需求。

hashcode()方法:

hashcode()介绍:
hashcode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整 数。这个哈希码的作用是
确定该对象在哈希表中的索引位置。

用法:

//新建一个hashtest类public class hashtest {}//测试类public class testmain {    public static void main(string[] args) {        hashtest h = new hashtest();                      int hash = h.hashcode();   //调用hashcode()方法        system.out.println(hash);  //输出可以得到一串整数    }}//460141958//这个数也就是哈希码,也称为散列码,//作用是确定该对象在哈希表中的索引位置

equals()方法:

参考官方文档可知:equals(object obj),需要传入一个对象
所以这个方法的作用就是判断其他对象是否“等于”此对象,返回值也就是布尔类型。
上代码:

public class hashtest {}  //还是使用那个类public class testmain {    public static void main(string[] args) {        hashtest h1 = new hashtest();        hashtest h2 = new hashtest();  //用一个类去创建两个对象,判断是否相等        system.out.println(h1.equals(h2));  //语法:h1.equals(h2)    }}//结果:fal
到这里,很多人就会有疑问了,同样的一个类去创建两个对象,为什么会不一样呢?ok,首先我们看一下equals的源码,看看它的判断原理是什么:
//equals源码   public boolean equals(object obj) {        return (this == obj);    }
源码很简单,不就是两个==号,但是我们知道类的引用类型的数据,而用两个等于号去判断两个引用类型,是去判断两者的内存地址是否相同,当一个类去new一个新对象时,是在堆内存内开辟了一个新的空间,当去创建两个或者多个类的时候,每个类肯定有属于自己的空间,所有也有一个独一无二的地址,这就是为什么这个判断为什么不成立的原因。但是比较对象的引用对于我们在实际开发中没有意义,我们一般还是要重写该方法,比如去判断两者的参数是否相等:
public class hashtest {    private int age;    public hashtest() {    }    public hashtest(int age) {        this.age = age;    }    public int getage() {        return age;    }    public void tage(int age) {        this.age = age;    }//重写equals方法,只要hashtest生成的对象,传入age参数相等,即可判断两者一致//重写后的equals,就不在是去判断两者的地址是否相同     @override    public boolean equals(object obj){        hashtest h = (hashtest) obj;    //多态        if(this.age == h.getage()) {            return true;        }        return fal;    }}//测试类:public class testmain {    public static void main(string[] args) {        hashtest h1 = new hashtest(5);        hashtest h2 = new hashtest(5);        system.out.println(h1.equals(h2));    }}//结果:true//若吧其中一个age改成6:public class testmain {    public static void main(string[] args) {        hashtest h1 = new hashtest(5);        hashtest h2 = new hashtest(6);        system.out.println(h1.equals(h2));    }}//结果:fla

== 和 equals 的区别是什么?

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同 一个对象。
(基本数据类型== 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有重写equals() 方法。则通过 equals() 比较该类的两个对象时, 等价于通过“==”比较这两个对象。
情况2:类重写了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象 的内容相等;若它们的内祝福语2022四字成语
容相等,则返回 true (即,认为这两个对象相等)

hashcode()与equals()的相关规定:

如果两个对象相等,则hashcode一定也是相同的 两个对象相等,对两个对象分别调用equals方法都返
回true, 两个对象有相同的hashcode值,它们也不一定是相等的。因此,equals 方法被重写过,则 hashcode 方法也必须被重写,hashcode() 的默认行为是对堆上的对象产生独特值。如果没有重写hashcode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指 向相同的数据)

getclass()方法:

返回此 object 运行时的类,,获取对象的真实类的全名称
比如在使用多态时,父类引用变量,使用getclass()方法就可以看到真实的类:

public class hashtest {}//测试类public class testmain {    public static void main(string[] args) {        hashtest h1 = new hashtest();        system.out.println(h1.getclass());  //调用getclass()    }}输出值:class hashtest
这个就比较好理解,简单的说就是看当时使用该方法的对象,到底是哪个类。还有一个应用场景,在使用多态的时候,在代码多的时候我们做不到用肉眼去找这个多态是用哪子类,即使找得到,也很浪费时间,那么getclass()方法就派上用场了:
//在polymorphismtest包下创建了person类,作为父类package polymorphismtest;public class person {    public void eat(){        system.out.println("我会吃饭");    }}//创建student类,继承personpackage polymorphismtest;public class student extends person{    @override    //重写父类eat方法    public void eat(){        system.out.println("我是学生,我也还吃春晚节目表饭");    }}//测试类package polymorphismtest;public class testmain {    public static void main(string[] args) {        person p = new student();    //使用多态        p.eat();                     //这里其实就是使用了student子类的方法        system.out.println(p.getclass());  //查看p到底是什么类    }}//输出结果://我是学生,我也还吃饭//class polymorphismtest.student
用父类去引用子类的方法时,可以执行子类的方法,当用getclass()方法去查看,结果也是student子类不使用多态,使用类本身去创建对象时:
package polymorphismtest;public class testmain {    public static void main(string[] args) {            person p = new person();  //当这里不使用多态,而是使用本身的时候        p.eat();        system.out.println(p.getclass());    }}/为他人开一朵花/我会吃饭//class polymorphismtest.person//这里返回的就是person类了

tostring()方法:

返回一个字符串来标识当前对象
对于这个方法,我们先来看看tostring()源码:

 public string本尼迪特试剂 tostring() {        return getclass().getname() + "@" + integer.tohexstring(hashcode());    }
其实也很简,就是 类名+符号@+对象的哈希码值
public class t木耳炒肉estmain {    public static void main(string[] args) {        person p = new person();        system.out.println(p.tostring());    }}//结果:polymorphismtest.person@1b6d3586
但是这个返回值视乎没什么意义,所以,为了返回值有更多的意义,我们可以重写这个方法

总结

到此这篇关于java中object类4种方法详细介绍的文章就介绍到这了,更多相关java object类内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 13:52:43,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7796953118950a89ca0bf4d7869b3575.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java中Object类4种方法详细介绍.doc

本文 PDF 下载地址:java中Object类4种方法详细介绍.pdf

标签:方法   对象   两个   重写
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图