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); // 输出trueSystem.out.println(p1 == p2); // 输出falseSystem.out.println(p1.equals(p2)); // 输出false
}
}

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

class Person{
...@Overridepublic 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;@Overridepublic 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,会有详解!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法分析与设计基础

一、绪论 1.算法的概念及特征 1.1 定义: 算法是指求解某个问题或是某类问题的一系列无歧义的指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得所要求的输出。 1.2 特征: 输入:算法中的各种运…

最新版 BaseRecyclerViewAdapterHelper4:4.1.2 最简单的QuickViewHolder用法,最简洁的代码,复制可用

为了照顾新手,尽量详细,高手勿喷!!! 怕麻烦的话可以直接下载源码:https://download.csdn.net/download/ERP_LXKUN_JAK/88678044?spm1001.2014.3001.5503 先看文件结构,是不是很简单 AndroidSt…

用anaconda下载安装pytorch1.8.2+cudatoolkit11.1

用anaconda下载安装pytorch1.8.1cudatoolkit11.1 设置清华镜像下载: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda con…

小程序面试题 | 17.精选小程序面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【2023】通过docker安装hadoop以及常见报错

💻目录 1、准备2、安装镜像2.1、创建centos-ssh的镜像2.2、创建hadoop的镜像 3、配置ssh网络3.1、搭建同一网段的网络3.2、配置host实现互相之间可以免密登陆3.3、查看是否成功 4、安装配置Hadoop4.1、添加存储文件夹4.2、添加指定配置4.3、同步数据 5、测试启动5.1…

Linux:apache优化(3)—— 页面缓存时间

作用:通过 mod_expires 模块配置 Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求,减轻服务端工作压力。启用 mod_expires 模块后,会自动生成页面头部信息中的 Expires 标签和 CacheControl 标签&#xff0…

华为商城秒杀时加密验证 device_data 的算法研究

前言 之前华为商城放出 Mate60 手机时, 想给自己和家人抢购一两台,手动刷了好几天无果后,决定尝试编写程序,直接发送 POST 请求来抢。通过抓包和简单重放发送后,始终不成功。仔细研究,发现 Cookie 中有一个名为 devic…

Solana主流钱包盘点和评测:Phantom,Bitget钱包,Ledger等

Solana绝对是今年加密货币界的大红人!大家都在热烈讨论这个项目,想象它会给加密世界的未来带来怎样的变革。是不是觉得新晋的加密爱好者们都很酷?他们正迈出探索这个领域的第一步,寻找合适的钱包。无论是准备长期持有Solana&#…

【第4期】Springboot集成阿里云对象存储OSS+Vue+Iview文件上传组件

本期简介 文件上传是非常常见的功能,本期要实现的功能是将文件存储到阿里云分布式对象存储OSS中,这样做的好处是随便哪里都可以方便的展示出该图片,并且图片以链接形式在客户端浏览器渲染,流量不会经过后台,降低后台压…

数据库——创建存储过程、函数和触发器安装phpmyadmin

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机,在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作: (1)登录 MySQL,在 MySQL 中创建用户,…

【CCF-B】院士主编,通过率70%,国人友好,审稿慢

01 期刊概况 Frontiers of Computer Science 【出版社】Springer, Co-publication with Higher Education Press 【ISSN】2095-2228 【ISSN】2095-2236 【检索情况】SCI&EI双检 【WOS收录年份】2012年 【期刊官网】 https://www.springer.com/journal/11…

C# WPF上位机开发(Web API联调)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多时候,客户需要开发的不仅仅是一个上位机系统,它还有其他很多配套的系统或设备,比如物流小车、立库、数字孪…