【转载】JAVA基础复习与总结<三> Object类的常用方法
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 Student
2 {
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 }

输出结果:s1和s2不是同一个人。
很明显输出的结果是错误的,因为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 else
15 {
16 temp = false;
17 }
18 return temp;//返回一个布尔值
19 }

上面的是书上的例子,不太好理解,我自己编了一个equals()方法,简单但不知道对不对:
***在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 else
20 {
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
s1和s2是同一人
以上内容转载自: https://www.cnblogs.com/wxywxy/p/6740277.html
【转载】JAVA基础复习与总结<三> Object类的常用方法的更多相关文章
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)
一.String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 class Demo17 { ...
- Java基础知识强化27:Object类之toString()方法
1. Object类的toString()方法: public String toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: package cn.itc ...
- Java基础知识强化26:Object类之hashCode()方法、getClass()方法
1. Object类的hashCode()方法,如下: public int hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...
- JAVA基础复习与总结<五> String类_File类_Date类
String类 .Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicoe字符组成. .Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String, ...
- Java基础复习笔记系列 三
前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿. Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...
- JAVA基础复习与总结<七> File类_基本的IO概念_输入输出
File类 1.操作目录 mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败 mkdirs() list() 文件:目录字符串形式 ,只返回目录和文件的名称 listFiles() ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- 《Java基础复习》-控制执行流程
最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...
随机推荐
- js关于“变量提升、作用域、私有作用域等知识点”高级解题思路
var i = 2, x = 5;var fn = function (x) { x += 3; return function (y) { console.log(( ...
- docker安装elasticsearch
docker search elasticsearch 选择一个版本,拉取镜像 docker pull elasticsearch: 查看镜像 docker images 通过镜像,启动一个容器,并将 ...
- python 学习 leetcode ---number of island
Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...
- exists,in的区别-mysql
如说两张表一张是用户表TDefUser(userid,address,phone),一张是消费表TAccConsume(userid,time,amount),我要查消费超过5000的用户记录,那么我 ...
- BMCP位图图片压缩算法
什么是位图?位图也称像素图像或点阵图像,是由多个点组成的,这些点被称为像素.位图可以模仿照片的真实效果,具有表现力强.细腻.层次多和细节多等优点. 图片的压缩格式:在Windows系统中,我们常见的b ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- 项目Alpha冲刺(团队)-第一天冲刺
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 作业目标:描述第一天冲刺的项目进展.问题困难.心得体会 ...
- Java基础——Instanceof 运算符
Instanceof 运算符 java 中的instanceof 运算符是用来在运行时指出对象是否为特定类的一个实例 instanceof运算返回值:boolean类型 用法 boolean resu ...
- 禁用 urllib3 的安全请求警告
报错情况: 禁用该警告: import urllib3 urllib3.disable_warnings()
- FreeRTOS如何结束和重新启动调度程序
大多数主机或桌面系统(比如Linux,Mac或Windows)都有一个正常的用例,你可以在早上启动操作系统,然后在晚上关闭它,然后你就离开机器.嵌入式系统是不同的:他们没有参加,他们应该“永远”运行. ...