博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Object类及其常用方法简介
阅读量:6330 次
发布时间:2019-06-22

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

Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。这里主要总结Object类中的三个常用方法:toString()equals()hashCode()

1.取得对象信息的方法:toString()

该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。

1 class Student 2 { 3     String name = "Mary"; 4     int age = 21; 5 } 6  7 public class Text{ 8     public static void main(String[] args) 9     {10         Student s = new Student();11         System.out.println("姓名:"+s.name+",年龄:"+s.age);//输出对象属性12         System.out.println(s);//直接输出对象信息13         System.out.println(s.toString());//调用父类方法输出对象信息14     }15 }

输出结果:

姓名:Mary,年龄:21

ClassNotes.Student@15db9742

ClassNotes.Student@15db9742

上述结果看出编译器默认调用toString()方法输出对象,但输出的是对象的地址,我们并不能看懂它的意思。那么就要通过重写Object类的toString()方法来输出对象属性信息。

1 class Student2 {3     String name = "Mary";4     int age = 21;5     public String toString()6     {7         return "姓名:"+name+",年龄:"+age;8     }9 }

输出结果:姓名:Mary,年龄:21。这样对象信息就更加清晰了。

2.对象相等判断方法:equals()

该方法用于比较对象是否相等,而且此方法必须被重写。

1 class Student 2 { 3     String name; 4     int age; 5     public Student(String name,int age) 6     { 7         this.name=name; 8         this.age=age; 9     }10 }11 12 public class Text{13     public static void main(String[] args)14     {15         Student s1 = new Student("Mary",21);16         Student s2 = new Student("Mary",21);17         System.out.println(s1.equals(s2));//输出一个boolean值18         System.out.println(s1.equals(s2)?"s1和s2是同一个人":"s1和s2不是同一个人");//?:条件运算符19     }20 }

输出结果:s1s2不是同一个人

很明显输出的结果是错误的,因为equals()方法比较的是两个对象的地址,所以必须重写方法才能到达目的。

1 //重写父类(Object类)中的equals方法 2 public boolean equals(Object o) 3 { 4     boolean temp = true; 5     Student s1 = this; 6     if(o instanceof Object) 7     { 8         Student s2 = (Student)o; 9         if(!(s1.name.equals(s2.name)&&s1.age==s2.age))10         {11             temp = false;12         }13     }14     else15     {16         temp = false;17     }18     return temp;//返回一个布尔值19 }

上面的是书上的例子,不太好理解,我自己编了一个equals()方法,简单但不知道对不对:

1 class Student 2 { 3     String name; 4     int age; 5     //重写父类(Object类)中的equals方法 6     public boolean equals() 7     { 8         boolean temp; 9         Student s1 = new Student();10         s1.name="张三";s1.age=12;11         Student s2 = new Student();12         s2.name="张三";s2.age=12;13         if((s1.name.equals(s2.name))&&(s1.age==s2.age))14         {15             temp = true;16         }17         else18         {19             temp = false;20         }21         return temp;22     }23 }24 25 public class Text{26     public static void main(String[] args)27     {28         Student s3 = new Student();29         System.out.println(s3.equals()?"是同一人":"不是同一人");30     }31 }
DEMO

***Eclipse偶然发现一个快捷键,按住ctrl+/会注释当前行

3.对象签名:hashCode()

该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的.hashCode

1 class Student 2 { 3     String name; 4     int age; 5     //重写父类(Object类)中的equals方法 6     public boolean equals() 7     { 8         boolean temp; 9         Student s1 = new Student();10         s1.name="张三";s1.age=12;11         Student s2 = new Student();12         s2.name="张三";s2.age=12;13         System.out.println("s1的哈希码:"+s1.hashCode());14         System.out.println("s2的哈希码:"+s2.hashCode());15         if((s1.name.equals(s2.name))&&(s1.age==s2.age))16         {17             temp = true;18         }19         else20         {21             temp = false;22         }23         return temp;24     }25     //重写hashCode()方法26     public int hashCode()27     {28         return age*(name.hashCode());29     }30 }31 32 public class Text{33     public static void main(String[] args)34     {35         Student s3 = new Student();36         System.out.println(s3.equals()?"s1和s2是同一人":"s1和s2不是同一人");37     }38 }

输出结果:

s1的哈希码:9298668

s2的哈希码:9298668

s1s2是同一人

转载于:https://www.cnblogs.com/wxywxy/p/6740277.html

你可能感兴趣的文章
解决部分月份绩效无法显示的问题:timestamp\union al\autocommit等的用法
查看>>
CRT + lrzsz 进行远程linux系统服务器文件上传下载
查看>>
nginx 域名跳转 Nginx跳转自动到带www域名规则配置、nginx多域名向主域名跳转
查看>>
man openstack >>1.txt
查看>>
linux几大服务器版本大比拼
查看>>
在BT5系统中安装postgresQL
查看>>
Can't connect to MySQL server on 'localhost'
查看>>
【Magedu】Week01
查看>>
写给MongoDB开发者的50条建议Tip25
查看>>
PostgreSQL学习手册(四) 常用数据类型
查看>>
为什么要让带宽制约云计算发展
查看>>
[iOS Animation]-CALayer 绘图效率
查看>>
2012-8-5
查看>>
VS中ProjectDir的值以及$(ProjectDir)../的含义
查看>>
我的友情链接
查看>>
PHP实现排序算法
查看>>
Business Contact Mnanager for Outlook2010
查看>>
9种用户体验设计的状态是必须知道的(五)
查看>>
解决WIN7下组播问题
查看>>
陈松松:视频营销成交率低,这三个因素没到位
查看>>