https://www.cnblogs.com/wxywxy/p/6740277.html

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()方法,简单但不知道对不对:

 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 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是同一人

看似简单的知识背后,承载的是收获和成长!

Object类及其常用方法简介的更多相关文章

  1. 【转载】JAVA基础复习与总结<三> Object类的常用方法

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

  2. Object类和常用方法

    Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...

  3. Object类的常用方法

    Object类是Java中所有类的始祖.如果没有明确的指定继承,则默认继承Object类.在Java中除了基本类型外都是Object类型的对象,包括数组. 1)equals方法 Object: pub ...

  4. Eclipse的使用与Oblect类的常用方法_DAY11

    一.Java开发工具的使用 A:notepad windows自带的记事本. B:高级记事本 Editplus Notepad++ UE sublime2 C:集成开发工具(IDE) 开发和运行. E ...

  5. Java 常用对象-Object类

    2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ...

  6. 菜鸡的Java笔记 Object 类

    Object 类        Object类 的主要作用        Object 类的常用方法             内容        虽然有了对象的向上转型,可以解决了参数的统一问题,但是 ...

  7. 包和访问权限修饰符,.单例设计模式,.Object类常用方法,.内部类

    1.包和访问权限修饰符 1.1 包 为什么要导包? 将字节码文件(.class)文件进行分类存放 --->包 其实就是文件夹 import java.util.Arrays; 包的划分规则 方案 ...

  8. object类的equals方法简介 & String类重写equals方法

    object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...

  9. AJPFX关于Java Object类常用方法小总结

    java.lang.Object   java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...

随机推荐

  1. 【编程工具】Sublime Text3 之 Emmet 插件的详细使用的方法

    这篇关于 Emmet 插件使用的博文之前就想写了,今天刚好闲暇时间,就花了一些时间进行了总结. 我们都这道 Emmet 这款插件在前端设计里被称为神器,确实,神器称号名不虚传.因为这款插件可以帮助我们 ...

  2. python3--__repr_和__str__会返回字符串表达形式

    __repr_和__str__会返回字符串表达形式 下一个例子是已经见过的init构造方法和add重载方法,本例也会定义返回实例的字符串表达形式的__repr__方法.字符串格式把self.data对 ...

  3. A Survey of Model Compression and Acceleration for Deep Neural Network时s

    A Survey of Model Compression and Acceleration for Deep Neural Network时s 本文全面概述了深度神经网络的压缩方法,主要可分为参数修 ...

  4. 【C#】堆、栈和堆栈的区别

    导读:今天看视频,就看到了堆.栈这一块了.记得当年初相见(VB视频),劈头盖脸一阵蒙,什么都不知道,那时候师傅叫我挂起来,说我随着学习的进度,慢慢的就会懂了.现在,学到了这里,想着自己对自己从前的问题 ...

  5. 九度oj 题目1029:魔咒词典

    题目描述:     哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮 ...

  6. eclipse逆向生成实体类

    (转自:http://blog.csdn.net/wangpeng047/article/details/6877720) 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理 ...

  7. 【Luogu】P3052摩天大楼里的奶牛(状压DP)

    参见ZHT467的题解. f[i]表示在i这个集合下的最少分组数和当前组最少的容量. 从1到(1<<n)-1枚举i,对于每个i枚举它的子奶牛,然后重载运算符计算. 代码如下 #includ ...

  8. 2>&1使用

    2>&1使用 一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |).2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号 ...

  9. 转 C++STL之string

    http://www.cnblogs.com/wangkangluo1/archive/2011/07/22/2114118.html string类的构造函数: string(const char ...

  10. compose.yml模板文件

    默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式. 示例: version: " services: webapp: image: examples/web ...