学习笔记,仅供参考


文章目录

  • API概述
  • Object类
    • hashCode()方法
    • getClass()方法
    • toString()方法
    • equals()方法
    • ==与equals()方法的区别

API概述

API(Application Programming Interface) ,是指应用程序编程接口。Java API,就是Java提供给我们使用的类,这些类将底层的实现封装了起来、

Object类

  • Object类概述

    • 它是类层次结构的根类
    • 所有类都直接或者间接的继承自该类
  • 构造方法
    • 只有空参构造:public Object();

备注:子类的构造方法默认访问的是父类的空参构造方法

hashCode()方法

  • 方法概述

    • hashCode()方法会返回该对象的哈希码值,返回值类型是int类型,默认情况下,该方法会根据该对象的地址来计算。
    • 不同对象的,hashCode()一般来说不会相同,但是同一个对象的hashCode()值肯定相同。
  • 举个例子

package com.guiyang.object;import com.guiyang.bean.Cat;public class Demo1_HashCode {public static void main(String[] args) {Object o1 = new Object();System.out.println(o1.hashCode()); Cat c1 = new Cat();System.out.println(c1.hashCode());Cat c2 = new Cat();System.out.println(c2.hashCode());}}

输出:

1829164700
2018699554
1311053135

getClass()方法

  • 方法概述

    • 该方法会返回对象的字节码文件(.class文件),返回值类型为Class类。
    • 我们可以通过调用Class类中的方法,来获取信息,比如getName()方法可以获取对象的类的全名称
  • 举个例子
package com.guiyang.object;import com.guiyang.bean.Student;public class Demo2_GetClass {public static void main(String[] args) {Student s1 = new Student();Class clazz = s1.getClass(); //获取s1的字节码文件String name = clazz.getName();System.out.println(name);}}

输出:

com.guiyang.bean.Student

toString()方法

toString()方法会返回该对象的字符串表示,我们可以通过改写类的toString方法,来显示对象的属性值。

  • 举个例子1(未重写的toString方法)
package com.guiyang.restudy3;import com.guiyang.bean.Cat;public class D3ToString {public static void main(String[] args) {Cat cat = new Cat();System.out.println(cat.toString());System.out.println(cat); //如果直接打印对象的引用,会默认调用toString方法}
}

输出:

com.guiyang.bean.Cat@6d06d69c
com.guiyang.bean.Cat@6d06d69c

我们看到@左边是Cat类的全名,@右边是该对象的十六进制哈希码值。

  • 举个例子(重写Student类的toString方法)

我们看到上面例子中toString()方法输出的结果好像没什么意义,这时,我们可以改写该类的toString()方法,比如,我们改写Student类的toString()方法:

package com.guiyang.bean;public class Student {private String name;private int age;public Student() {super();}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {                //alt+shift+s 再加 sreturn "Student [name=" + name + ", age=" + age + "]";}}
  • 举个例子3(重写的toString方法)
package com.guiyang.object;import com.guiyang.bean.Cat;
import com.guiyang.bean.Student;public class Demo3_ToString {public static void main(String[] args) {Student s1 = new Student("小白", 18);String str = s1.toString(); //这里我们改写了Student类的toString方法System.out.println(str);System.out.println(s1);     //如果直接打印对象的引用,会默认调用toString方法Cat c1 = new Cat();System.out.println(c1);     //未改写的toString方法}}

输出:

Student [name=小白, age=18]
Student [name=小白, age=18]
com.guiyang.bean.Cat@6d06d69c

equals()方法

该方法可以判断两个对象是否相等(默认情况下比较的是对象的引用是否相同),返回值为布尔类型,由于比较对象的引用没有意义,一般建议重写该方法。

  • 举个例子1(未重写equals()方法)
package com.guiyang.restudy3;import com.guiyang.eclipse.Bunny;public class D4Equals {public static void main(String[] args) {Bunny bunny1 = new Bunny();Bunny bunny2 = new Bunny();boolean b = bunny1.equals(bunny2);System.out.println(b);System.out.println(bunny1 == bunny2);}}

输出:

false
false

我们看到未重写equals方法时,该方法对比的是两个对象的地址值是否相等,它的作用和==相同,所以我们需要重写该方法,扩展该功能,比较对象的属性值,比如相同属性的对象可以相等。

  • 举个例子2(重写Bunny类的equals()方法)
package com.guiyang.eclipse;public class Bunny {private String name;private int age;public Bunny() {super();}public Bunny(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object obj) { //alt+shift+s 再加vBunny b = (Bunny)obj;       //注意这是多态,需要向下转型return this.name.equals(b.name) && this.age == b.age;  //String类的equals方法}
}
  • 举个例子3(重写equals()方法)
package com.guiyang.restudy3;import com.guiyang.eclipse.Bunny;public class D4Equals {public static void main(String[] args) {Bunny bunny1 = new Bunny("Huang", 9);Bunny bunny2 = new Bunny("Huang", 9);boolean b = bunny1.equals(bunny2);  //注意,如果我们利用空参构造创建对象,那么name的默认值为null,而null不是一个字符串,所以会报错System.out.println(b);               //比较对象的属性值System.out.println(bunny1 == bunny2);//比较对象地址值}
}

输出:

true
false
  • null和空字符串的区别

null与空字符串主要区别如下:

  • null不指向任何对象,相当于没有任何值;而空字符串代表一个长度为0的字符串

  • null不分配内存空间;而空字符串会分配内存空间

==与equals()方法的区别

  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值.
  • equals方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法可以比较对象中的属性值

第三次学JAVA再学不好就吃翔(part45)--Object类相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part82)--泛型

    学习笔记,仅供参考 收集的泛型Blog:泛型 泛型 泛型的概述 泛型概述 通常而言我们只会使用容器来存储一种类型的对象.泛型的主要目的之一就是用来指定容器要持有什么类型的,因此与其使用Object,我 ...

  3. 第三次学JAVA再学不好就吃翔(part37)--接口概述

    学习笔记,仅供参考 文章目录 面向对象 接口 接口的概述及其特点 接口的成员特点 面向对象 接口 接口的概述及其特点 接口的概述 从狭义的角度讲就是指java中的interface 从广义的角度讲,对 ...

  4. 第三次学JAVA再学不好就吃翔(part31)--super关键字

    学习笔记,仅供参考 文章目录 面向对象 继承 继承中成员变量的关系 this和super的区别 继承中构造方法的关系 继承中构造方法的注意事项 继承中的成员方法关系 面向对象 继承 继承中成员变量的关 ...

  5. 第三次学JAVA再学不好就吃翔(part90)--TreeSet

    学习笔记,仅供参考,有错必纠 文章目录 TreeSet TreeSet存储自定义对象 Comparable接口 定义Dog类实现Comparable接口 比较器 Comparator接口的方法 实现C ...

  6. 第三次学JAVA再学不好就吃翔(part69)--System类

    学习笔记,仅供参考,有错必纠 文章目录 System类 字段 方法 gc方法 exit方法 currentTimeMillis方法 arraycopy方法 举个例子 System类 System类是在 ...

  7. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  8. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  9. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

最新文章

  1. 发布webservice之后调用不通
  2. MyBatis的入门知识
  3. 云安全联盟发布更新版安全应用指南
  4. .net core 中间件管道底层剖析
  5. Java 程序执行过程的内存流程图(手写稿)
  6. 有趣的反直觉的“三门问题”
  7. plsql大字段保存类型_大揭秘,学习python,为什么数据类型有这么重要
  8. Puppet 命令参数介绍(三)
  9. HTML图形映射技术
  10. docker 容器启动后立马退出的解决方法
  11. 在mybatis里面设置不同数据库运行环境和适应性问题
  12. 边学边写,琐碎记载oracle
  13. jconsole监控tomcat
  14. Docker Jenkins 连接agent:SSH key presented by the remote host does not match the key saved in the Know
  15. CentOS 5设置千兆网卡
  16. c语言自动安装打印机驱动,安装自定义的即插即用打印机驱动程序
  17. Set的insert操作
  18. 神经网络知识点汇总——FNN
  19. 《H打飞机》技術支持網址
  20. hht时频图三维_HHT方法的原理

热门文章

  1. unicode编码查询方法
  2. leetcode:位操作
  3. pandas: DataFrame在数据处理时一些常用的操作汇总
  4. 回旋矩形C语言,C语言程序设计100例之(27):回旋方阵
  5. 如何切换 SVN 用户名
  6. Linux高性能网络:协程系列08-协程实现之调度器
  7. 58.配置tomcat监听80 虚拟主机 日志
  8. MySQL源码学习——DBUG调试
  9. django中的认证登陆与用户的创建
  10. 2.5 隐藏委托关系