JavaSE语法之十二:Object类

文章目录

    • 一、概念
    • 二、获取对象信息
    • 三、对象比较equals方法
    • 四、hashcode方法

一、概念

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的,默认会继承Object父类,即所有的类的对象都可以使用Object的引用进行接收

例:使用Object接收所有类的对象。

class Person{}
class Student{}
public class Test {
	public static void main(String[] args) {
		function(new Person());
		function(new Student());
}
	public static void function(Object obj) {
		System.out.println(obj);
	}
}

//执行结果:
Person@1b6d3586
Student@4554617c

在开发中,Object类是参数的最高统一类,但是Object类也存在有定义好的一些方法:
在这里插入图片描述

本小节中,我们主要来熟悉这几个方法:toString()方法、equals()方法、hashcoode()方法。

二、获取对象信息

如果要打印对象中的内容,可以直接重写Object类中的toString()方法,之前我们很详细的整理过了,此处不再累赘。

// Object类中的toString()方法实现:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

三、对象比较equals方法

在Java中,==进行比较时:

  1. 如果 == 左右两侧是基本类型变量,比较的是变量中值是否相同;
  2. 如果 == 左右两侧是引用类型变量,比较的是引用变量地址值是否相同;
  3. 如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比较的。
// Object类中的equals方法
public boolean equals(Object obj) {
	return (this == obj); // 使用引用中的地址直接来进行比较
}
class Person{
	private String name ;
	private int age ;
	public Person(String name, int age) {
	this.age = age ;
	this.name = name ;
	}	
}

public class Test {
	public static void main(String[] args) {
		Person p1 = new Person("张三", 21) ;
		Person p2 = new Person("李四", 20) ;
		int a = 10;
		int b = 10;
		System.out.println(a == b); // 输出true
		System.out.println(p1 == p2); // 输出false
		System.out.println(p1.equals(p2)); // 输出false
}
}

Person类重写equals方法后,然后比较:

class Person{
...
	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false ;
	}
	//指的是同一个对象
		if(this == obj) {
			return true ;
	}
		// 不是Person类对象
		if (!(obj instanceof Person)) {
			return false ;
	}
	
		Person person = (Person) obj ; // 向下转型,比较属性值
		return this.name.equals(person.name) && this.age==person.age ;
}
}

结论:比较对象中内容是否相同的时候,一定要重写equals方法,equals方法可以用编译器生成。

四、hashcode方法

  1. hashcode方法用来确定对象在内存中存储的位置是否相同;
  2. 事实上hashCode() 在散列表中才有用,在其他情况下没用。在散列表中hashCode()的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
class People {
    public String name;
    public int age;
}

public class Test6 {
    public static void main(String[] args) {
        People people1 = new People();
        people1.name = "张三";
        People people2 = new People();
        people2.name = "张三";

        System.out.println(people1.hashCode());
        System.out.println(people2.hashCode());
    }
}

//运行结果
2083562754
1239731077
此时地址值不一样

重写hashCode()方法

class People {
    public String name;
    public int age;

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

public class Test6 {
    public static void main(String[] args) {
        People people1 = new People();
        people1.name = "张三";
        People people2 = new People();
        people2.name = "张三";

        System.out.println(people1.hashCode());
        System.out.println(people2.hashCode());
    }
}

//运行结果
774920
774920

hashCode这个方法,目前我们用不到,在数据结构HashMap,会有详解!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/282056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装与部署Hadoop

一、前置安装准备1、机器2、java3、创建hadoop用户 二、安装Hadoop三、环境配置1、workers2、hadoop-env.sh3、core-site.xml4、hdfs-site.xml5、linux中Hadoop环境变量 四、启动hadoop五、验证 一、前置安装准备 1、机器 主机名ip服务node1192.168.233.100NameNode、DataNod…

纯CSS的华为充电动画,它来了

📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 Krpano专栏:想学Krpano的,冲 &#x1f514…

准备好通过 “Breakin’ B.I.G.” 在嘻哈音乐界大放异彩吧!

在 The Sandbox 推出人物化身系列后,是时候通过 “Breakin’ B.I.G.” 重返嘻哈音乐的黄金时代了。该体验于 12 月 20 日推出,一直持续到 1 月 3 日,让玩家回到 20 世纪 90 年代,体验以 Notorious B.I.G 为主角的 2D 街舞游戏。 获…

【深度学习-目标检测】01 - R-CNN 论文学习与总结

论文地址:Rich feature hierarchies for accurate object detection and semantic segmentation 论文学习 摘要(Abstract) 对象检测性能的现状: 在PASCAL VOC数据集上测量的对象检测性能在过去几年已经达到了一个高点。最佳性能…

python使用openpyxl为excel模版填充数据,生成多个Sheet页面

目标:希望根据一个给定的excel模版,生成多个Sheet页面,比如模版: 示例程序 import openpyxlexcel_workbook openpyxl.load_workbook("模版.xlsx") for _i in range(3): # 比如填充3个页面# 复制模版sheet页&#x…

arkts状态管理使用(@State、@Prop、@Link、@Provide、@Consume、@objectLink和@observed)

一、状态管理 1.在声明式UI中,是以状态驱动视图更新: ①状态(State):指驱动视图更新的数据(被装饰器标记的变量) ②视图(View):基于UI描述渲染得到用户界面 注意: ①…

机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM*续集

目录 1、A-CDM实施效果评估背景 2、评估核心指标项 (1)机位效率 (2)登机效率 (3)推出效率 (4)滑行效率 (5)协同效率 3、其他指标项 (1&a…

MongoDB Certified Associate Developer 认证考试心得

介绍 前段时间通过了 MongoDB Associate Developer 考试,也记下了一些心得,结果忘记发出来了,现在重新整理下。通过考试后证书是这样的: MongoDB 目前有两个认证证书 1. MongoDB Associate Developer 认证掌握使用MongoDB 来构建现代应用…

kivy开发一个登陆界面

Kivy Kivy是一个用于开发跨平台移动应用(如Android和iOS)以及桌面应用(如Windows、Linux和macOS)的Python框架。它采用开源许可证(MIT许可证),提供了丰富的图形界面组件和工具,以便…

Tensorflow2.X的GPU版框架最快最稳搭建方法

一、环境基础 Windows10以上 已装Anaconda 支持GPU 二、搭建步骤 1. 在Anaconda中创建并进入虚拟环境 conda create -n envname python3.8 conda activate envname 注意:envname 替换为你自己想命名的,下文将以“Ljdenv”出现 2.安…

二叉树的后序遍历,力扣

目录 建议先刷一下中序遍历 题目地址: 题目: 我们直接看题解吧: 解题方法: 注: 解题分析: 解题思路: 代码实现: 代码实现(递归): 代码实现&#x…

【2023年终总结】谈谈一个新人眼里的阿里方法论

写在开头 2023年转眼就过去了,今年我从一名大学生转变某阿里系大厂的“搬砖打工人”,这一转变真的是给我“涉世未深的纯洁心灵”带来了大大的“震撼”。 角色的转变是需要时间进行“内部消化”的。无论是对于个人的价值认知或者是行为方式来说&#xf…

面试官:谈谈对CyclicBarrier的理解

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

kivy中用anchrolayout

说明 AnchorLayout 是 Kivy 框架中用于管理界面元素位置的一种布局方式。AnchorLayout 的特点是,它可以将其子元素锚定到布局的边界上,例如顶部、底部、左侧或右侧。这使得在需要元素相对于其容器边界保持固定位置时非常有用。 界面 # mylayout.kvAnch…

K8s资源管理介绍

用这个官网下的,kube-flannel.yml ,就不会nodes not-ready --- kind: Namespace apiVersion: v1 metadata:name: kube-flannellabels:k8s-app: flannelpod-security.kubernetes.io/enforce: privileged --- kind: ClusterRole apiVersion: rbac.author…

基于NASM搭建一个能编译汇编语言的汇编软件工具环境(利用NotePad++)

文章目录 一、创建汇编语言源程序二、Notepad的下载、安装、使用三、下载和安装编译器NASM3.1 下载NASM编译器3.2 安装并配置环境变量 四、编译汇编语言源程序(使用命令)五、下载和使用配套源码及工具六、将编译功能集成到Notepad 一、创建汇编语言源程序…

回首2023: 程序员跳出舒适圈

1 前言 今天的冬日暖阳高照,照耀着我穿着羽绒服的身体,让我感到火一般的燥热,仿佛错觉中已经到了阳春三月。刚刚把孩子洗好,我坐在电脑前,准备整理一下思绪,回顾一下2023年的生活和工作。 2 2023 回顾 回…

如何处理并下载Sentinel-5数据

SENTINEL-5是欧洲空间局(European Space Agency,ESA)Copernicus计划中的一颗地球观测卫星。SENTINEL-5的主要任务是监测大气成分,特别是臭氧、氮二氧化物、二氧化硫、甲烷和其他气体的分布。这些观测对于了解大气污染、气候变化和…

React快速入门之交互性

响应事件 创建事件处理函数 处理函数名常以handle事件名命名 function handlePlayClick() {alert(Playing);}传递事件处理函数 函数名、匿名两种方式&#xff01; function PlayButton() {function handlePlayClick() {alert(Playing);}return (<Button handleClick{handl…

几代WiFi有什么差异,它们有什么区别

最典型的差异指标&#xff1a;单流传输速率 第一代 基于的标准&#xff1a; 802.11 使用频率&#xff1a;2.4GHz 单流最大传输速率&#xff1a;2Mbit/s 第二代 基于的标准&#xff1a; 802.11b 使用频率&#xff1a;2.4GHz 单流最大传输速率&#xff1a;11Mbit/s 第三代 …