码迷,mamicode.com
首页 > 其他好文 > 详细

Object类和@Data注解

时间:2019-08-03 14:45:54      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:返回值   col   pre   ack   create   lombok   资源释放   通知   stat   

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

简要概述:

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: sunxuesong@hztianque.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(); // 输出的是类名+@+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: sunxuesong@hztianque.com
 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,为什么呢??下结将说明单例的好处,以及为什么在写代码的时候要用单例?

Object类和@Data注解

标签:返回值   col   pre   ack   create   lombok   资源释放   通知   stat   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!