特别说明:若是有不对的地方欢迎指正

简要概述:

Object类是java中所有类默认继承的一个类。下面介绍一下Object类中的一些重要的方法,面试中也是经常会被问到的。尤其是==和equals的区别

1、getClass();

 package com.test;

 import lombok.Data;

 /**
* @Title: StudyObj
* @Description: Object类方法
* @author: sunxuesong@hztianque.com
* @date: Created in 12:46 2019/8/3
* @Modifired by:
*/
@Data
public class StudyObj { public static void main(String[] args) {
StudyObj studyObj = new StudyObj();
// 得到运行状态中该类的路径 输出结果为:class com.test.StudyObj
System.out.println(studyObj.getClass());
}
}

2、clone();   // 顾名思义得到该类的一个副本,基本上不用

3、wait();、notify(); 、notifyAll()// 分别是等待、唤醒当前、唤醒所有的意思,基本上不用

4、hashCode(); // 得到该对象的一个hash码,返回值是int类型,基本上不用

5、finalize(); // 若该对象调用了finalize()方法则表示通知jvm去回收该对象进行资源释放,一般也不会被调用

6、toString(); // 输出的是类名+@+hashcode, 该方法一般都会被重写,若类中在加入@Data注解的时候,toString()会被重写返回的是属性和值

7、equals(Object); // 这里着重说说equals,请看下面的代码和注释说明

 package com.test;

 import lombok.Data;

 /**
* @Title: StudyObj
* @Description: sunxuesong
* @author: sunxuesong@hztianque.com
* @date: Created in 12:46 2019/8/3
* @Modifired by:
*/
@Data
public class StudyObj { private String name; private StudyObj(String name) {
this.name = name;
} public static void main(String[] args) { StudyObj studyObj1 = new StudyObj("张三");
StudyObj studyObj2 = new StudyObj("张三");
/*
* 答案是false
* 说到这里就有人会疑问了,参数里面明明是同一人问什么却是false,这里就牵扯到jvm的堆内存了
* 首先我们要知道凡是通过new关键字生成的对象都是在堆内存中,这中情况下比较的是堆中的内存地址
* 若该对象不是单例的或者该对象没有重写equals方法那么equals比较出来的将永远都是false
* 因为该类上面加了@Data注解,这个注解重写equals方法,所以当内容都是张三的时候返回的是true
* 抛去@Data注解则是false,我们一般用这个注解的目的是去除get和set方法来达到代码简洁的目的
* 所以这个注解要慎用
*/
if (studyObj1.equals(studyObj2)) {
System.out.println(true);
}else {
System.out.println(false);
}
/*
* 这里返回的是false,和equals一样比较的是jvm堆中的内存地址是不是指向同一个内存
* 说明:对象比较的是内存,像下面的String进行equals比较的则是值(切记)
* 但是==比较的还是堆内存地址是否指向同一个内存
*/
if (studyObj1 == studyObj2) {
System.out.println(true);
}else {
System.out.println(false);
} String str1 = new String("aaa");
String str2 = new String("aaa");
// true
System.out.println(str1.equals(str2));
// false
System.out.println(str1 == str2); }
}

总结:==和equals区别:

对象:==和equals比较的都是内存地址是否指向同一块内存

String:equals比较的是值是否相同,==比较的是内存地址是否指向同一块内存

若类上面加了@Data注解则表示重写了equals方法,对象中的属性值一致的话也是返回为true,否则为false

若是单例模式则返回的是true,为什么呢??下结将说明单例的好处,以及为什么在写代码的时候要用单例?

Object类和@Data注解的更多相关文章

  1. 项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok

    @Data注解来源与Lombok,可以减少代码中大量的set get方法,大量减少冗余代码,但是今天部署项目时候,发现实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错. ...

  2. Idea的类中使用实体类(有@Data注解)的Get/Set方法报错

    今天从svn上面下了一个maven项目,导入到Idea中之后,发现有的类会使用实体类的Set/Get方法(全报错),导致该问题的原因就是因为实体类中没有这个方法,代码类似如下: @Data publi ...

  3. @Data 注解在实体类的使用可省去生成GET,SET方法

    你有没有觉得在每个实体类中都要生成get,set方法很麻烦, 要是需求的变化,需要再加一个字段,添加属性后则又要添加其get,set方法 现有一个很好用的注解能解决这个麻烦 1,idea中装上 lom ...

  4. Java基础12:深入理解Class类和Object类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. 夯实Java基础系列9:深入理解Class类和Object类

    目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...

  6. @Data注解简化代码

    1 Lombok背景介绍 官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that know how ...

  7. java class类和object类

    Class类 介绍 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息 Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类( ...

  8. Java提高学习之Object类详解(1)

    转自:http://www.importnew.com/10304.html 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父 ...

  9. Object类可以接受引用类型

    Object类是一切类的父类,所以Object类可以接受一切引用类型.连数组和接口对象也都可以接受. 1.接受数组 public class ObjectTest{ public static voi ...

随机推荐

  1. jmeter-手机号验证注册登录

    1.测试计划->线程组 2.首先获取需要注册的手机号,获取手机号的方式如下 (1)使用配置元件导入需要注册的手机 ·右键线程组-->配置元件-->CSV数据文件设置,如图: (2)使 ...

  2. NOIP模拟测试9

    又考崩了咕咕咕... T1:随    好题标记 前置芝士: 原根:质数P的原根g满足1<=rt<P,且rt的1次方,2次方…(P-1)次方在模P意义下可以取遍1到(P-1)的所有整数.   ...

  3. 用js和css实现选项卡效果+jq(2019-10-09)

    1效果图: 2代码: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  4. Mokia(三维偏序)P4390

    提到cdq,就不得不提这道该死的,挨千刀的题目了. 极简题面: 给定一个二维平面,在ti时刻会在(xi,yi)放一个点,会在tj时刻查询一个方框里面的点的数量 看道题就是二维线段树乱搞啊,这么水??? ...

  5. 爬虫学习--常用的正则表达式 Day3

    在做爬虫经常遇到需要用正则校验数据时候,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,给自己留个底,也给朋友们做个参考. 一.校验数字的表达式 1 ...

  6. Python基础学习(一)之Python的概述与环境安装

    Python介绍 Python语言介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php .ruby 面向对象对应 ...

  7. python模块——socket

    实例一. server: #socket套接字(IP + 端口号)(qq,wechat 发送接收消息依靠socket模块),cs架构import socketserver = socket.socke ...

  8. python函数的基本语法<三>

    实参和形参: 定义函数括号里的一般叫形参 调用时括号里传递的参数一般叫实参 def students(age): print('my age is %s' % age) students(18) ag ...

  9. SQL Server 2014:在修改表的内容时,提示“此单元格已更改,尚未将更改提交到数据库”,怎么处理?

    那一行上的属性为“不允许为null”的所有字段都填上对应信息,按回车键或者点击下一行任意一个单元格便会自动将更改的信息提交到数据库.

  10. Nvm安装步骤

    下载地址 https://github.com/coreybutler/nvm-windows/releases 解压压缩包,后是一个.exe结尾的安装文件,双击安装, 选择安装位置,如下图: 设置n ...