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

简要概述:

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. NOIP 模拟17

    最近状态有些不对劲,总是出现各种各样的小错误...... 这次可以说是很水的一套题(T3神仙题除外),T1就是一个优化的暴力,考场上打了一个n的四次方的程序,在距考试结束还有5分钟的时候猜想出来正解, ...

  2. 详解Kafka Producer

    上一篇文章我们主要介绍了什么是 Kafka,Kafka 的基本概念是什么,Kafka 单机和集群版的搭建,以及对基本的配置文件进行了大致的介绍,还对 Kafka 的几个主要角色进行了描述,我们知道,不 ...

  3. html5不能播放视频的方法

    html5不能播放视频的方法H5不能播放视频的方法 格式工厂转换成 AVC 注意音频流 采样率和比特率 设置低一点 不然播放会卡住 还有点击播放必须要click 不要用touchstart没效果的

  4. Unity 简记(2)--2D移动

    目录 1.输入 1.1直接检测按下哪个按键 1.2.检测水平输入和垂直输入 2.移动 2.1.Transform组件 2.2.RigidBody组件 2.3.NavMeshAgent组件 2.4.Ch ...

  5. Java设计模式之模板方法模式(Template)

    前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象“来做调整”,针对这种拥有 ...

  6. java线程池的介绍与使用(Executor框架)

    1. 先来看一下类构成 public interface Executor { //顶级接口Executor,定义了线程执行的方法 void execute(Runnable command); } ...

  7. hdu 1269 迷宫城堡 (tarjan)

    迷宫城堡Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  8. HTML的标签认识

    <!--      html标签     h1~h6 标题标签(只有1~6,依次减小)     p 段落标签     span 无意义的行标签     div 无意义的块标签     b 加粗 ...

  9. CSV数据存取

    CSV数据的读取十分地简单 分为两部分 读 读取csv文件可以使用csv模块下的reader(f)以及DictReader(f) mport csv with open("text.csv& ...

  10. 2019-9-11:渗透测试,基础学习,ubuntu搭建LAMP

    一,apache web服务器安装 1,sudo apt-get install apache2 2,systemctl status apache2,检查apache2是否开启 #开启.关闭和重启a ...