Java高级篇之Object 类
发布日期:2021-07-27 05:06:35 浏览次数:8 分类:技术文章

本文共 2415 字,大约阅读时间需要 8 分钟。

一、Object 类

1、它是所有类的根类,如果一个类未继承其它类它一定继承了Object类,比如

Class Person [extends Object]{} //extends Object 被省略掉
2、Object类中没有属性,只有非私有的方法,这说明它的所有的方法都是子类的方法,这些方法子类都可以重写或者直接进行调用。
3、 在多态中有二个概念叫向上转型和向下转型,其中向上转型的要义就是子类的对象可以直接转换为父类型的对象,Object是所有子类的父类所以所有的对象都可以直接转换为Object类型,比如 Person person;,Object o = person;如果做了这种转换,意味着子类中属于自已的方法都不能使用只能使用Object类的方法。如果一个方法的参数声明为Object类型,比如 public void methd(Object o),意味着所有的对象都可以传入,其内部会自动作类型转换。

sendObj(new String("xxxxxxxx"));//内部执行了向上转型public static void sendObj(Object o){
System.out.println(o); //传入的对象类型就是Object类型,该对象只能调用Object的方法,如果需要调用自已的方法进行向下转换(强制转换) System.out.println(((String) o).length());}

4、Object的常用方法

public int hashCode()

返回对象的哈希码值。 支持这种方法是为了散列表,如HashMap提供的那样

1、什么是散列表
该表中的所有元素都有确定的地址,元素的地址又由元素的key值来决定。
在这里插入图片描述

因此,我们认为对象的哈希值就是对象的地址,System.out.print(obj)的输出结果中的地址值就是调用obj的hashCode()方法的返回值,也就是对象的哈希值。该方法一般由其它的Api来调用,应用程序的设计者一般不会自已去调用。该方法可以被重写,但强烈建议如果对象要放入HashSet集合或作为HashMap集合的key,最好不要重写该方法,否则可能会造成内存泄漏。

2、toString() 方法

public String toString()

返回对象的字符串表示形式。 一般来说, toString方法返回一个“textually代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。

System.out.println(o.toString());//输出对象执行toString方法的返回值System.out.println(o);

在输出语句中,直接使用对象就相当于调用了toString,这是一种默认行为。

如果子类希望改变对象的字符串的表示形式,就可以重写该方法,它的内容可以作为程序执行中日志的输出。

@Overridepublic String toString() {
return "name="+name+" age="+age;}

4、equals() 方法

public boolean equals(Object obj)

指示一些其他对象是否等于此对象。

用来比较两个对象是否是同一对象,相当于 obj1 == obj2 判断
在String类中,该方法被重写了,因此在String 对象上调用该方法是用来比较串值是否相等,而不是判断是否是同一对象。
另外,有时候会在子类中去重写该方法,如果设计者认为两个对象的属性值完全一致,则这两个对象是相等的对象。

@Overridepublic boolean equals(Object o) {
if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {
return Objects.hash(name, age);}

5、jdk1.7新增加的Objects 类

java.util.Objects public static int hash(Object... values)
Object... values 是1.5新特性,叫可变参数,传值是可传入的参数个数是动态的,没有也行,多个也行。传值时多个参数用 , 分隔,如 Objects.hash(name, age),Objects.hash();

为输入值序列生成哈希码。

常用来在重写hashCode()方法进行调用,用该方法的返回值替换原有方法的返回值。

public static boolean equals(Object a,                             Object b)

方法返回true如果参数相等,彼此false其他。 因此,如果两个参数都是null , true返回null ,如果只有一个参数是null ,则返回false 。 否则,使用第一个参数的equals方法确定相等性。

该方法用来替换 Object中的equals方法,老的方法具有类型不安全的漏洞,如果参数比较的对象是null会抛空指针异常,而新的方法则不会。原码:

return (a == b) || (a != null && a.equals(b));

转载地址:https://blog.csdn.net/qq_45442483/article/details/109728215 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java高级篇之Date 类
下一篇:java数据结构篇(一)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年09月21日 07时58分12秒