类Object
Object概述
java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类。
常用方法
public String toString():返回该对象的字符串表示。
代码举例:
定义person类
package demo01;
public class Person {
//创建成员变量
private String name;
private int age;
//getXxx setXxx方法
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;
}
//直接打印对象名是输出对象的内存地址值,没有意义。我们要重写toString方法,输出我们想要的内容。
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
定义测试类
package demo01;
public class Demo01ToString {
public static void main(String[] args) {
//创建person对象
Person person = new Person();
/*java.lang.Object`类是Java语言中的根类,即所有类的父类。
`public String toString()`:返回该对象的字符串表示。
*/
//直接打印 对象名 其实就是调用对象的ToString方法。默认输出的是内存地址值
System.out.println(person);// 等价于 System.out.println(person.toString());
}
}
执行结果:

注意:
- 看一个类是否重写了toString方法,只需要直接打印对象名即可。如果输出结果是内存地址值,那么此类就没有重写toString方法。
- 在IntelliJ IDEA中,可以点击Code菜单中的Generate,也可以使用快捷键alt+insert,点击toString()选项。选择需要包含的成员变量并确定。
public boolean equals(Object obj):比较其他某个对象是否与此对象“相等”。参数:object obj :可以传递任意的对象。
查看equals源码:
public boolean equals(Object obj) {
// 默认是使用== 运算符 去判断2个对象是否相等
return (this == obj);
}
分析源码:
this是谁?
谁调用此方法,this就是哪个对象。谁是参数,obj就代表谁。例如:
Person p1 = new Person("张三", 18);
Person p2 = new Person("李四", 19);
boolean b = p1.equals(p2); // this就是p1,obj参数就是p2 , this == obj 等价于 p1 = p2
System.out.println(b);//false
又因为:
== 比较运算符,返回的是一个布尔值 true false。根据数据类型的不同,比较的内容不同。
- 基本数据类型:比较的是数值
- 引用数据类型:比较的是内存地址值
结论:
object 类中的equals方法,默认比较的是对象的内存地址值,没有意义。实际开发中我们需要重写equals方法比较对象的属性值。因为参数是object 是父类传递进来的是子类对象。多态弊端:无法使用子类特有的属性和方法,解决方法:向下转型。大多数IDE都可以自动生成equals方法的代码内容。在IntelliJ IDEA中,可以使用Code菜单中的Generate…选项,也可以使用快捷键alt+insert,并选择`equals() and hashCode()进行自动代码生成。生成的equals方法代码如下:
@Override
public boolean equals(Object o) {
// 如果内存地址,一样 那么必然相等,
if (this == o)
return true;
/*getClass() != o.getClass()利用反射技术判断是p,是否是Person类型
等价于obj instanceof Person
*/
if (o == null || getClass() != o.getClass())
return false;
Person person = (Person) o;
//Objects.equals(name, person.name); 可以防止空指针异常,详解:Ojects类equals 源码
return age == person.age && Objects.equals(name, person.name);
}
这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。
类Object的更多相关文章
- java的eclipse操作和常用类Object的使用
1.eclipse的快捷键: (1)alt + / 内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...
- JAVA 一个特殊的类 Object
一个特殊的类Object:它是java中所有对象的直接或间接父类,根父类(基类),它里面定义的功能是所有对象都应该具备的(所有的类,都是继承这个类的) 记住:当定义一个新类时,没有指明要继承某类,它默 ...
- Java常用类object详解
1.Object概述: 类Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法. 2.构造方法详细信息: Object只有一个无参构造方法,因为ob ...
- python 类(object)的内置函数
python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
- Java的常用类——Object类、String类
Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...
- Java中特殊的类——Object类
Java中特殊的类--Object类 1.Object类的概述 Object类是java默认提供的类.Java中除了Object类,所有的类都是有继承关系的.默认会继承Object类,即所有的对象都可 ...
- java常用类 --- Object
Object类 Object类是所有Java类的父类,其位于java.lang包中.任何Java对象,如果没有显示定义父类则它默认Object类作为父类. 方法如下: 其中与线程相关的有5个方法: n ...
- java笔记--超级类Object多线程的应用+哲学家进餐算法内部类与多线程结合
关于Object类中的线程方法: Object类是所有Java类的 父类,在该类中定义了三个与线程操作有关的方法,使得所有的Java类在创建之后就支持多线程 这三个方法是:notify(),notif ...
- C# - 系统类 - Object类
Object类 ns:System 此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为 ...
- 【小白的java成长系列】——顶级类Object源代码分析
首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetw ...
随机推荐
- java集合常见面试题
1. Array和ArrayList的区别,什么时候更合适用Array a) Array是数组,可以容纳基本类型和对象,而ArrayList是集合,只能容纳对象 b) Array是 ...
- GitHub的Repository权限将public转为private
2019年1月7日,GitHub CEO Nat Friedman 于官方博客公开发文,称“New year, new GitHub”,宣布从此将免费无限地为普通用户提供私有仓库服务. 因此,我们可以 ...
- 使用 Moq 测试.NET Core 应用 -- Mock 行为
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...
- 《前端之路》之四 JavaScript 的闭包、作用域、作用域链
04:JavaScript 的闭包 一.定义: 常规定义: 闭包的定义: 有权利访问外部函数作用域的函数. 通俗定义: 1.函数内部包含了函数.然后内部函数可以访问外部函数的作用域. 2.内部函数可以 ...
- 深入浅出mongoose
深入浅出mongoose mongoose是nodeJS提供连接 mongodb的一个库. 此外还有mongoskin, mongodb(mongodb官方出品). 本人,还是比较青睐mongoose ...
- springboot~@Query到DTO对象
我们有时在进行开发过程中,使用jpa的@Query注解去选择多张表然后返回一个DTO对象,这个时候我们需要特殊处理一下,因为默认情况下,你的jpa代码是不认DTO对象的. 参考文章:https://s ...
- java编程行业微信群,无论新手老手欢迎加入,会一直更新
纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群
- centos7 python3 pip
pip of python3 installed is play well with Django and spider. #安装pip可以很好的使用django和爬虫 wget https:// ...
- centos7+rsyslog+loganalyzer+mysql 搭建rsyslog日志服务器
一.简介 在centos7系统中,默认的日志系统是rsyslog,它是一类unix系统上使用的开源工具,用于在ip网络中转发日志信息,rsyslog采用模块化设计,是syslog的替代品. 1.rsy ...
- 玩转SpringBoot之定时任务详解
序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer) 前者相信大家都很熟悉, ...