Object类和@Data注解

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

简要概述:

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

1、getClass();

 1 package com.test;
 2
 3 import lombok.Data;
 4
 5 /**
 6  * @Title: StudyObj
 7  * @Description: Object类方法
 8  * @author: [email protected]nque.com
 9  * @date: Created in 12:46 2019/8/3
10  * @Modifired by:
11  */
12 @Data
13 public class StudyObj {
14
15     public static void main(String[] args) {
16         StudyObj studyObj = new StudyObj();
17         // 得到运行状态中该类的路径 输出结果为:class com.test.StudyObj
18         System.out.println(studyObj.getClass());
19     }
20 }

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

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

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

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

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

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

 1 package com.test;
 2
 3 import lombok.Data;
 4
 5 /**
 6  * @Title: StudyObj
 7  * @Description: sunxuesong
 8  * @author: [email protected]
 9  * @date: Created in 12:46 2019/8/3
10  * @Modifired by:
11  */
12 @Data
13 public class StudyObj {
14
15     private String name;
16
17     private StudyObj(String name) {
18         this.name = name;
19     }
20
21     public static void main(String[] args) {
22
23         StudyObj studyObj1 = new StudyObj("张三");
24         StudyObj studyObj2 = new StudyObj("张三");
25         /*
26          * 答案是false
27          * 说到这里就有人会疑问了,参数里面明明是同一人问什么却是false,这里就牵扯到jvm的堆内存了
28          * 首先我们要知道凡是通过new关键字生成的对象都是在堆内存中,这中情况下比较的是堆中的内存地址
29          * 若该对象不是单例的或者该对象没有重写equals方法那么equals比较出来的将永远都是false
30          * 因为该类上面加了@Data注解,这个注解重写equals方法,所以当内容都是张三的时候返回的是true
31          * 抛去@Data注解则是false,我们一般用这个注解的目的是去除get和set方法来达到代码简洁的目的
32          * 所以这个注解要慎用
33          */
34         if (studyObj1.equals(studyObj2)) {
35             System.out.println(true);
36         }else {
37             System.out.println(false);
38         }
39         /*
40         * 这里返回的是false,和equals一样比较的是jvm堆中的内存地址是不是指向同一个内存
41         * 说明:对象比较的是内存,像下面的String进行equals比较的则是值(切记)
42         * 但是==比较的还是堆内存地址是否指向同一个内存
43         */
44         if (studyObj1 == studyObj2) {
45             System.out.println(true);
46         }else {
47             System.out.println(false);
48         }
49
50         String str1 = new String("aaa");
51         String str2 = new String("aaa");
52         // true
53         System.out.println(str1.equals(str2));
54         // false
55         System.out.println(str1 == str2);
56
57     }
58 }

总结:==和equals区别:

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

String:比较的是值是否相同

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

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

原文地址:https://www.cnblogs.com/sunxuesong/p/11294674.html

时间: 2024-08-30 17:37:26

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

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

Java基础12:深入理解Class类和Object类 Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建. 说白了就是: Class类也是类的一种,只是名字和class关键字高度相似.Java是大小写敏感的语言.

springboot中使用@data注解,减少一些不必要代码

一.idea安装lombok 二.重启idea 三.添加maven依赖(pom.xml) <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> 四.实体类 @Datapublic class Base implements

@Data注解简化代码

1 Lombok背景介绍 官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code. 大致意思是Lombok通过增加一些“处理程序”,可以让java变得简洁.快速. 2 Lombok使用方法 Lombok能以简单的注解形式来简化java代码,提高开

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

目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); registerNatives()方法; Clone()方法实现浅拷贝 getClass()方法 equals()方法 hashCode()方法; toString()方法 wait() notify() notifAll() finalize()方法 CLass类和Object类的关系 参考文章 微信公众号 Ja

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

转自:http://www.importnew.com/10304.html 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Object类的,原因在这里指出:Section 9.6.3.4 of the Java Language Specification:“Object类不作为接口的父类”.Object类中声明了以下函数,我会在下文中作详细说明. 1 prote

Java:Object类详解

Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的.例如,新手可能不会理解Object类.这篇文章分成三个部分讲跟Object类及其方法有关的问题. 上帝类 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Object类的,原因在这里指出:Section 9.6.3.4 of the Java Language Specification:"

springboot 使用 lombok插件中的@data 注解

一.idea安装lombok插件 二 添加maven依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> 三 书写一个实体类 @Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals().hash

springboot使用@data注解,减少不必要代码

一.idea安装lombok插件 二.重启idea 三.添加maven依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> 四.书写一个实体类 import lombok.Data; @Data public cla

@Data 注解作用JavaBean

今天在看代码的时候, 看到了这个注解, 之前都没有见过, 所以就查了下, 发现还是个不错的注解, 可以让代码更加简洁. 这个注解来自于 lombok,lombok 能够减少大量的模板代码,减少了在使用@Data 注解时, 需要导入lombok.Data,下面列举下 lombok提供的注解: val : 和 scala 中 val 同名, 可以在运行时确定类型; @NonNull : 注解在参数上, 如果该类参数为 null , 就会报出异常,  throw new NullPointExcept