第三次学JAVA再学不好就吃翔(part45)--Object类
学习笔记,仅供参考
文章目录
- 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类相关推荐
- 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...
- 第三次学JAVA再学不好就吃翔(part82)--泛型
学习笔记,仅供参考 收集的泛型Blog:泛型 泛型 泛型的概述 泛型概述 通常而言我们只会使用容器来存储一种类型的对象.泛型的主要目的之一就是用来指定容器要持有什么类型的,因此与其使用Object,我 ...
- 第三次学JAVA再学不好就吃翔(part37)--接口概述
学习笔记,仅供参考 文章目录 面向对象 接口 接口的概述及其特点 接口的成员特点 面向对象 接口 接口的概述及其特点 接口的概述 从狭义的角度讲就是指java中的interface 从广义的角度讲,对 ...
- 第三次学JAVA再学不好就吃翔(part31)--super关键字
学习笔记,仅供参考 文章目录 面向对象 继承 继承中成员变量的关系 this和super的区别 继承中构造方法的关系 继承中构造方法的注意事项 继承中的成员方法关系 面向对象 继承 继承中成员变量的关 ...
- 第三次学JAVA再学不好就吃翔(part90)--TreeSet
学习笔记,仅供参考,有错必纠 文章目录 TreeSet TreeSet存储自定义对象 Comparable接口 定义Dog类实现Comparable接口 比较器 Comparator接口的方法 实现C ...
- 第三次学JAVA再学不好就吃翔(part69)--System类
学习笔记,仅供参考,有错必纠 文章目录 System类 字段 方法 gc方法 exit方法 currentTimeMillis方法 arraycopy方法 举个例子 System类 System类是在 ...
- 第三次学JAVA再学不好就吃翔(part106)--字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...
- 第三次学JAVA再学不好就吃翔(part46)--Scanner类
学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...
最新文章
- 发布webservice之后调用不通
- MyBatis的入门知识
- 云安全联盟发布更新版安全应用指南
- .net core 中间件管道底层剖析
- Java 程序执行过程的内存流程图(手写稿)
- 有趣的反直觉的“三门问题”
- plsql大字段保存类型_大揭秘,学习python,为什么数据类型有这么重要
- Puppet 命令参数介绍(三)
- HTML图形映射技术
- docker 容器启动后立马退出的解决方法
- 在mybatis里面设置不同数据库运行环境和适应性问题
- 边学边写,琐碎记载oracle
- jconsole监控tomcat
- Docker Jenkins 连接agent:SSH key presented by the remote host does not match the key saved in the Know
- CentOS 5设置千兆网卡
- c语言自动安装打印机驱动,安装自定义的即插即用打印机驱动程序
- Set的insert操作
- 神经网络知识点汇总——FNN
- 《H打飞机》技術支持網址
- hht时频图三维_HHT方法的原理