java中Object和Objects类、toString方法和equals方法介绍

Object类:

Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类。Object中描述的所有方法其子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有指定父类, 那么默认则继承Object类。

Object类中包含多个方法,这里先介绍几个常用方法:toString、equals,如:

//1. java.lang.Object类是类层次的根类(最顶层的类),所有类默认都继承了此类:下面将使用Object类中的toString方法进行测试(不手动继承Object类的情况下),
// toString方法讲一个对象转换为字符串
public class ObjecttoString{public static void main(String[] args){// 3.创建一个学生类的对象:StudentClass studentone = new StudentClass("韩梅梅",18);// 4.studentone对象调用toString方法:String str = studentone.toString();System.out.println(studentone);//StudentClass@2a3046daSystem.out.println(str);//StudentClass@2a3046da,可以看到这里打印的结果和直接打印对象的结果一样,打印应用型数据时其结果是引用数据类型的地址值,如果想要得到更精确的结果,可以覆盖重写toString方法使其答应对象的属性(StudentClass中覆盖重写)// 当覆盖重写toString方法后返回的结果为两次:名字:韩梅梅,年龄:18,// 6.equals方法用于比较两个对象的地址值是否相等,返回布尔值;equals方法默认比较的是两个对象的地址值是否相等是没有什么意义的,既是两个对象的属性值相等,也是返回false,一般需要重写此方法,来实现比较属性值相等就返回true。StudentClass studenttwo =  new StudentClass("李雷",19);StudentClass studentthree = new StudentClass("韩梅梅",18);boolean result1 = studentone.equals(studenttwo);boolean result2 = studentone.equals(studentthree);boolean result3 = studenttwo.equals(studentthree);System.out.println(result1);//falseSystem.out.println(result2);//false,equals方法默认比较地址值是否相等,因此这里既是值相等,也返回false,如果想要比较对象值是否相等,那么就要重写equals方法,覆盖重写后的结果为true;System.out.println(result3);//falseSystem.out.println("str1".equals("str1"));//true}
};
/* 2.定义一个标准的学生类:任何类默认都继承了Object类,实际是:public class StudentClass extends Object{},
既是没有手动的写继承,但是默认是继承了Object类的,因此Object类中的任何方法都可以在当前类使用: */
public class StudentClass{// 定义成员变量:private String name;private int age;// 定义无参构造:public StudentClass(){};// 定义全参构造:public StudentClass(String names,int ages){this.name = names;this.age = ages;};// name的get-和set-方法:public String getName(){return name;};public void setName(String names){this.name = names;};// age的get-和set-方法:public int getAge(){return age;};public void setAge(int ages){this.age = ages;  };// 5.覆盖重写Object类中的toString方法使其返回成员变量的值:(实际开发中可以使用idea开发工具中的快捷键进行覆盖重写,没必要自己动手,ArrayList类和Scanner类中默认重写了此方法)@Overridepublic String toString(){// return name;只返回name属性值// return age;只返回age属性值return "名字:"+name+",年龄:"+age;}// 7.覆盖重写equals方法使其比较两个对象的属性:equals方法中传入的是一个对象,这里隐含一个多态的问题,父类无法使用子类特有的内容(属性或方法);// Object obj = studentone = new StudentClass("韩梅梅",18);obj表示的是equals接收的对象,可以看到最左边和最右边构成多态的结构:父类指向子类,父类无法访问子类的属性或方法,如果真要访问那就要向下转型(把obj的类型转换为StudentClass类型)@Override//实际开发中也无需手动重写此方法,可借助idea开发工具中快捷键Alt+inset自动生成。public boolean equals(Object obj){if (obj == null) return false;//如果传入的一个空值,那么直接返回false,无需进行下面代码,可以提高程序效率。if (obj == this) return true;//如果传入的是本身,那么直接返回true,无需执行下面代码,可以提高程序效率。// 向下转型将obj为Object类型转换为StudentClass类型,使其可以比较属性或方法:if(obj instanceof StudentClass){//添加此判断是防止传入非StudentClass类型的数据导致转型异常报错StudentClass student = (StudentClass)obj;// 进行比较属性值并将布尔值赋值给变量res:boolean res = this.name.equals(student.name) && this.age == student.age;//this代表当前对象,student表示传入的对象(equals接收的对象),覆盖重写此方法时,应将所有属性都进行比较,结合逻辑与得到比较结果。// 返回比较的值:return res;};return false;//以上两种情况除外,当传入其他类型时,也直接返回false;}
};

Objects类:

Objects是一个工具类,它提供了一些方法来操作对象,它由一些静态的方法组成,并且这些方法允许空指针的出现,用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象等,如:

// 1.使用时导入Objects类:
import java.util.Objects;
public class ObjectsEquals{public static void main(String[] args){String str1 = null;String str2 = "kuhai";boolean result = Objects.equals(str1,str2);//允许传入空指针值,如果是Object使用null会报错。System.out.println(result);//false/*其源码:public static boolean equals(Object a, Object b) {  return (a == b) || (a != null && a.equals(b));  } */}
}

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

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

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

相关文章

实现线段切割法_切割晶圆及玻璃产品的现代技术与设备

作者:韩卓申科VS1,2,伊凡诺夫VI3,吕鸿图2,4,纳乌莫夫A S2,4,王薇媛4摘要:由于需以各种非金属半导体材料晶圆制造使用价值低之微电子产品,对其加工高精度及品质改善的要求更为严苛,因…

学python最重要的是_Python学习,要选哪个版本?

纵观各大编程语言在 2017 年的发展情况,我们会发现涌现出诸如 Go、Swift 这类后起之秀,而其中最为耀眼的当属 Python。之所以 Python 如此受捧,不仅仅是人工智能、数字科学领域的兴起,而且与其自身的特性必不可分,正应…

ARX中实现实体的偏移

static AcDbObjectId OffsetEnty(const ACHAR* BlkName,AcDbObjectId entId,double OfsValue,AcDbDatabase *pDbCrtEntity:: pPurDb); //!(多段线特别处理) AcDbObjectId EditEntity::OffsetEnty(const ACHAR* BlkName,AcDbObjectId entId,do…

java中Date类、DateFormat及SimpleDateFormat简介

Date类: Date类表示日期和时间,精确到毫秒(千分之一秒)位于java.util.Date下。日期是可以计算的,其本质是利用毫秒值进行计算,任何一个时间点都可以转换为毫秒值,毫秒值表示一个瞬间。 时间原…

gettype获取类名_在TypeScript中运行时获取对象的类名

在TypeScript中运行时获取对象的类名是否可以使用typescript在运行时获取对象的类/类型名称?class MyClass{}var instance new MyClass();console.log(instance.????); // Should output "MyClass"Adam Mills asked 2019-04-11T03:14:30Z9个解决方案…

LeetCode-Maximal Rectangle-最大矩形

https://oj.leetcode.com/problems/maximal-rectangle/ 一堆0,1矩阵中计算出由1组成的长方形的最大面积。 使用了直方图求最大面积的算法。枚举每一行p,然后在将一行上的所有列看做朝i>p方向出发的直方图,然后在这个直方图上用栈存储递增序列的那个一…

cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)

说实话,比起网站打不开,网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了,一般用户根本无从下手!任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题 :响应时间、执行时间…

java中日历类:Calendar

Calendar日历类 该类为抽象类,将所有可能用到的时间信息封装为静态成员变量,方便获取时间属性,其位于java.util.Calendar, 其中的getInstance方法可以返回一个Calendar类的子类对象,可以直接使用次子类进行创建对象&am…

typescript语法高亮插件_vscode常用插件

插件介绍HTML Snippets > 初级H5代码片段及提示HTML CSS Support > 初级H5代码片段及提示Debugger for Chrome > 让 vscode 映射 chrome 的 debug功能,静态页面都可以用 vscode 来打断点调试jQuery Code Snippets > jquery 重度患者必须品,废…

cfree运行程序错误_C/C++程序调试和内存检测

程序出现错误很正常,一个优秀的程序员必须学会调试,发现错误并改正。减少程序错误最有效的方法是:在敲代码之前,多花点时间思考,如何构造程序,数据结构和算法,尽量把细节提前写下来,…

java中System类、String Builder类简介

System类: System类为系统类,此包位于java.lang.System下,可以获得与系统相关的信息或系统操作,如: public class SystemClass{public static void main(String[] args){// 1.System下有许多静态的方法,其…

session的removeattribute移除一个不存在的属性会怎么用_公认峡谷机制最完美,对线几乎无解,夏侯惇高端局为何火不起来?...

Hello各位亲爱的小伙伴们,大家好,我是沐辰。在王者荣耀中始终有这么一个说法:“夏侯惇是王者峡谷机制最完美的英雄”,当然这个可不是沐辰胡编乱造,而是策划在数年前就曾公开发表过的看法。从机制上来,夏侯惇…

python图标的演变_python day 22 CSS拾遗之箭头,目录,图标

lanxing4. CSS拾遗之箭头画法.up { border-top: 30px solid green; border-right: 30px solid transparent; border-bottom: 30px solid transparent; border-left: 30px solid transparent; display: inline-block; } .down { border-top: 30px solid transparent; border-rig…

PHP中生成UUID

一、什么是UUID 简单的说UUID就是一串全球唯一的(16进制)数字串。 UUID的全拼为“Universally Unique Identifier”,可以译为“通用唯一识别码”。UUID由开源软件基金会 (Open Software Foundation, OSF) 定义,是分布式计算环境 (Distributed Computing …

java中包装类介绍

包装类: 基本数据类型使用起来非常方便,但是没有对应的方法来操作这些基本类型的数据,我们只有通过一个类把基本类型的数据封装起来,并在类中定义一些方法,这个类就叫做包装类。 包装类对应基本数据类型中的四类八种…

岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...

工作多年,被面试过很多次,也面试过很多人,其中有一次印象最深刻,这次我不是主面试官,经理要面试一个候选人,他就拉上了我,作为陪衬,用经理的话说就是撑撑场面, 所以问题的…

python新手入门课_Python基础视频12集入门课程

视频笔记:├─1简介与实验环境配置9│ Python基础.pptx│ Python简介.pptx│ 实验环境配置2-1.pdf│ 2.1简介与实验环境配置.mp4│ 请简述 Python 语言与 C 语言、 Java 语言的区别.txt│ 请简述使用 conda 管理 python 环境有哪些优势.txt│├─2编程模式与注释│ 你所认为的 …

java中Collection集合、Iterator迭代器接口、for each循环遍历集合或对象

Collection集合: 概念:集合是java中提供一种存储多个数据的容器;数组也是存储数据的容器,集合和数组的区别就是集合的长度可以改变,而数组的长度不可以改变;集合可以存储多种类型的对象数据,而数组只能存储…

工业镜头选型计算公式_变压器分接开关选型指南

如何选择变压器适用的分接开关型号?选型中又有哪些值得注意的事项呢?小编特别整理提炼了分接开关选型指南,让我们一起来看一下。分接开关的产品型号示例如下:型号中的各项参数和规格可通过以下步骤计算确定:1、确定调压…

icmp端口_pingtunnel搭建icmp隧道

说明pingtunnel可以将udp、tcp、sock5流量伪装成icmp传输,地址:https://github.com/esrrhs/pingtunnel/,详细说明和用法可参考官方说明。示例图客户端运行在攻击机,服务端运行在受害机。情况如下:通过pingtunnel搭建一…