Object类和@Data注解
特别说明:若是有不对的地方欢迎指正
简要概述:
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注解的更多相关文章
- 项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok
@Data注解来源与Lombok,可以减少代码中大量的set get方法,大量减少冗余代码,但是今天部署项目时候,发现实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错. ...
- Idea的类中使用实体类(有@Data注解)的Get/Set方法报错
今天从svn上面下了一个maven项目,导入到Idea中之后,发现有的类会使用实体类的Set/Get方法(全报错),导致该问题的原因就是因为实体类中没有这个方法,代码类似如下: @Data publi ...
- @Data 注解在实体类的使用可省去生成GET,SET方法
你有没有觉得在每个实体类中都要生成get,set方法很麻烦, 要是需求的变化,需要再加一个字段,添加属性后则又要添加其get,set方法 现有一个很好用的注解能解决这个麻烦 1,idea中装上 lom ...
- Java基础12:深入理解Class类和Object类
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- 夯实Java基础系列9:深入理解Class类和Object类
目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...
- @Data注解简化代码
1 Lombok背景介绍 官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that know how ...
- java class类和object类
Class类 介绍 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息 Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类( ...
- Java提高学习之Object类详解(1)
转自:http://www.importnew.com/10304.html 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父 ...
- Object类可以接受引用类型
Object类是一切类的父类,所以Object类可以接受一切引用类型.连数组和接口对象也都可以接受. 1.接受数组 public class ObjectTest{ public static voi ...
随机推荐
- NOIP 模拟赛 23 T4 大逃亡O(二分+广搜)(∩_∩)O
题目描述 给出数字N(1≤N≤10000),X(1≤x≤1000),Y(1≤Y≤1000),代表有N个敌人分布一个X行Y列的矩阵上,矩形的行号从0到X-1,列号从0到Y-1再给出四个数字x1,y1,x ...
- 参与国际化项目需遵循的java命名规范
笔者最近帮助一些朋友应聘远程工作(一般都是一些国外的项目),国外的项目负责人一般都会要求提供github账号或者一些源代码,很多朋友在这一关就被筛选掉了,其中不乏一些我认为技术非常厉害的行业大牛,他们 ...
- C#/.Net开发入门篇(1)——开发工具安装
众所周知,工欲善其事必先利其器,要想砍柴快一定得有把好刀,那么要想代码写的有效率.质量高一个趁手的编辑器是必不可少的,写代码不可能就用系统自带的文本编辑器(如果是大佬当我没说),这里我推荐各位使用微软 ...
- python经典面试算法题1.2:如何从无序链表中移除重复项
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [蚂蚁金服面试题] 难度系数:⭐⭐ ...
- 201871010114-李岩松《面向对象程序设计(java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- B2B电商正在向一个新的方向转变
在互联网+.中国制造2025等国家战略规划的不断催发下,淡出舆论风口多时的B2B电商,开始重新回归公众视野,B2B行业也就此得到一剂强心剂.不过值得关注的是,B2B平台商业模式已经开始发生变革. 互联 ...
- nyoj 76-超级台阶 (递推)
76-超级台阶 内存限制:64MB 时间限制:1000ms 特判: No 通过数:8 提交数:12 难度:3 题目描述: 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共 ...
- 【SSM Spring 线程池 OJ】 使用Spring线程池ThreadPoolTaskExecutor
最近做的Online Judge项目,在本地判题的实现过程中,遇到了一些问题,包括多线程,http通信等等.现在完整记录如下: OJ有一个业务是: 用户在前端敲好代码,按下提交按钮发送一个判题请求给后 ...
- tornado install
pip install tornado Linux 安装时注意库的安装路径和执行时寻找路径是否一样 Windows 安装时注意user是否有权限 解决办法:
- mysql--时区问题(时间差8个小时?修改Mysql 时区)
发现评论时间比本地时间晚8小时,原因:mysql默认时区选择了CST 解决办法: Ubuntu系统环境下: 1.检查mysql系统时区 进入mysql:mysql -u root -p mysql&g ...