Java Object类中的常用API介绍
作者:蓝桉cyq 发布时间:2023-11-09 01:51:00
Java常用API介绍
API概念
什么是API?
API(Application Programming interface) 应用程序编程接口。
简单来说:就是Java帮我们已经写好的一些方法**,我们直接拿过来用就可以了。**
Object类
Object类的作用:
Object类的方法是一切子类对象都可以直接使用的,所以我们要学习Object类的方法。
一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
toString方法
方法名 | 说明 |
---|---|
toString() | 默认是返回当前对象在堆内存中的地址信息: 类的全限名@内存地址 |
基本使用:
例如有一个Student类
public class Test {
public static void main(String[] args) {
Student stu = new Student();
// 方式一: 将返回的地址在变量中接收
String str = stu.toString();
System.out.println(str);
// 方式二: 输出时, 直接调用toString方法
System.out.println(stu.toString());
// 方式三: 直接输出对象变量, 默认可以省略toString方法
System.out.println(stu);
}
}
问题引出:
在开发中直接输出对象变量,默认输出对象的地址其实是毫无意义的。
事实上, 开发中更多的时候是希望看到对象的内容数据而不是对象的地址信息。
toString存在的意义:
父类toString()方法存在的意义是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
演示代码:
例如我们有如下一个Student类
package com.chenyq.d12_api_object;
/**
默认继承自Object
*/
public class Student {
private String name;
private int age;
private double height;
public Student() {
}
public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
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;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
我们可以在该Student类中重写toString方法
package com.chenyq.d12_api_object;
/**
默认继承自Object
*/
public class Student {
private String name;
private int age;
private double height;
public Student() {
}
public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
// 重新toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
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;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
此时再调用Student对象变量的toString方法, 会调用我们自己重写的toString, 返回对象的内容
public class Test {
public static void main(String[] args) {
Student stu = new Student("chenyq", 18, 1.88);
System.out.println(stu); // Student{name='chenyq, age=18, height=1.88}
}
}
小结:
Object的toString方法的作用是什么?
让子类重写toString方法,以便返回子类对象中的内容。
equals方法
方法名 | 说明 |
---|---|
equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
基本使用:
我们还是继续使用上面的Student类演示
public class Test2 {
public static void main(String[] args) {
Student stu1 = new Student("chenyq", 18, 1.88);
Student stu2 = new Student("chenyq", 18, 1.88);
// 这里equals调用的是Object中的
System.out.println(stu1.equals(stu2)); // false
}
}
问题思考:
直接比较两个对象的地址是否相同完全可以用 “==”, 那么为什么要使用equals呢?
equals存在的意义
在开发中, 其实我们并不会使用equals方法比较两个对象的地址, 通常是用来比较两个对象内容是否相同
而父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。
演示代码:
重写equals方法, 自己定制比较规则: 例如比较两个对象内容是否相同
package com.chenyq.d12_api_object;
import java.util.Objects;
/**
默认继承自Object
*/
public class Student {
private String name;
private int age;
private double height;
public Student() {
}
public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
/**
重写equals方法
s1 -> this
s2 -> o
*/
@Override
public boolean equals(Object o) {
// 1. 判断this和o是否是同一个对象
if (this == o) return true;
// 2. 判断o是否为null以及this和o类型是否相同
if (o == null || getClass() != o.getClass()) return false;
// 3. 将o强转为Student类型
Student student = (Student) o;
// 4. 返回age, height, name的比较结果
return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name);
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;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
此时再调用Student对象的equals方法, 就是调用的自己重写的equals
public class Test2 {
public static void main(String[] args) {
Student stu1 = new Student("chenyq", 18, 1.88);
Student stu2 = new Student("chenyq", 18, 1.88);
// 这里equals调用的是自己重写的, 比较对象内容是否相同
System.out.println(stu1.equals(stu2)); // true
}
}
来源:https://lanan.blog.csdn.net/article/details/127231680


猜你喜欢
- OpenCV概述OpenCV做为功能强大的计算机视觉开源框架,包含了500多个算法实现,而且还在不断增加,其最新版本已经更新到3.2。其SD
- 一、首先我们先创建一个Maven项目把我们需要的包先准备好 1.打开pom.xml文件引入依赖,以下是整个pom.xml文件<
- 写在前面,在笔者完成这个demo的时候,笔者发现现在大家已经不用Ajax来完成联级菜单了,实际上笔者这个demo也并不是为了完成这个,笔者主
- 前言在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同
- 前言android 防止重复点击是一个非常常见的需求,每个人都有各自的点击事件的处理习惯,有的喜欢使用匿名内部类,有的activity、fr
- 当前使用的IDEA版本是2020.1。随着IDEA版本的升级,有些插件不再支持,而有些插件变成了收费插件,这些插件将不再推荐。以下列举的,都
- GridView设置如下:<asp:GridView ID="GridViewlb" runat="se
- 前言本文主要给大家介绍了关于C/C++混合编程extern “C”使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介
- 本文实例为大家分享了QT实现简单计算器功能的具体代码,供大家参考,具体内容如下效果图:新建工程,创建类MainWindow,基类是QMain
- 这篇文章主要介绍了SpringMVC Mybatis配置多个数据源并切换代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- JVM 的主要作用是什么?JVM 就是 Java Virtual Machine(Java虚拟机)的缩写,JVM 屏蔽了与具体操作系统平台相
- (注意:本文基于JDK1.8)前言元素在存储到内存中,当我们需要使用在内存中存储的元素,这就涉及到在内存中查找元素,今天一起学习Vector
- @RequestLine的使用及配置@RequestLine与其它请求不同,只需要简单写请求方式和路径就能达到请求其它服务的目的。@Feig
- spring和mybatis整合整合思路需要spring通过单例方式管理SqlSessionFactory。spring和mybatis整合
- 一、Ctrl+F或者Ctrl+Shift+R 按照文本的内容查找1. 相当于eclipse的ctrl+H,Ctrl+F是在本页查找2. 相当
- 前言现在一般很少有用Android原生app发送邮件的需求,但是前段时间公司项目需要在Android app 内部发送邮件,于是就在网上收集
- 基于SSM+Mysql+Maven+HTML实现的员工绩效管理系统。该系统只有后台页面,后台前端框架使用的是layui官网推荐后台界面。角色
- C#获取远程图片,需要Form用户名和密码的Authorization认证using System;using System.Collect
- 本文研究的主要是Flask实现异步非阻塞请求功能,具体实现如下。最近做物联网项目的时候需要搭建一个异步非阻塞的HTTP服务器,经过查找资料,
- 在Java的6.0版本中新增了concurrent包,这个包是用作线程同步的包,提供了很多工具类。其中定时器就是其中之一。近期在做一个项目,