【转载】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 ...
随机推荐
- 使用 LD_PRELOAD 变量拦截调用
背景&原理 很多 a.out 程序都依赖动态库 libc.so, 比如使用 strcmp() 比较密码, 其实是不安全的 使用 LD_PRELOAD 变量可以使该变量中的可链接文件(编译时使用 ...
- js关于“call方法”百度,阿里超难面试题
面试题:function fn(a,b){ console.log(this); console.log(a); console.log(a+b);}fn.call(1);fn.ca ...
- 移动端1px问题处理方法
在做移动端开发时,设计师提供的视觉稿一般是750px,当你定义 border-width:1px 时,在iphone6手机上却发现:边框变粗了.. 这是因为,1px是相对于750px的(物理像素),而 ...
- neo4j语法
图数据库在社交网络.实时推荐.征信系统.人工智能等领域有广泛应用. 集群特征:主从复制,重选主服务器和容错:每个实例都有自己的本地缓冲 性能优势:查询内不跨网络:实时操作,具有快速和一致的响应时间:缓 ...
- python+redis+kairosdb+cassandra+mysql环境搭建
环境搭建: python安装: redis安装: 下载.解压.安装 1.wget http://download.redis.io/releases/redis-5.0.0.tar.gz 2.tar ...
- 友盟统计单页面应用vue
根据友盟官方提示在index.html的body标签末尾加入相关代码后: 后来发现,由于项目为单页面应用,在路由发生跳转时(到其他页面了),并不会重新将新页面加入统计中.需要在App.vue页面中,监 ...
- Spring Cloud 之 服务注册与发现
作为微服务框架,提供服务注册发现是最基本的功能.Spring Cloud 针对服务注册发现 提供了 Eureka版本的实现 .Zookeeper版本的实现.Consul版本的实现.由于历史原因 Eur ...
- 2018-2019-2-20175225 实验一 《Java开发环境的熟悉》实验报告
2018-2019-2-20175225 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及知识点 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA编辑.编 ...
- 【easy】189. Rotate Array
题目标签:Array 题目给了我们一个数组 和 k. 让我们 旋转数组 k 次. 方法一: 这里有一个很巧妙的方法: 利用数组的length - k 把数组 分为两半: reverse 左边和右边的数 ...
- 初学python之路-day11
一.函数的参数:实参与形参 # 参数介绍: # 函数为什么要有参数:因为内部的函数体需要外部的数据 # 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 # 怎么使用函数的参数:在 ...