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 ...
随机推荐
- websocket socketJs
springboot实现服务器端消息推送(websocket + sockjs + stomp) 服务器端推送技术在web开发中比较常用,可能早期很多人的解决方案是采用ajax向服务器轮询消息,这 ...
- 第六天、用户、组、权限、grep
第六天.用户.组.权限.grep 权限总结表 操作 源目录权限 文件权限 目标目录权限 rm删文件 wx - - mv改名 wx - - mv移动文件 wx r wx cp复制文件 x r wx &g ...
- C++中对C的扩展学习新增语法——引用
引用 引用的好处: 1.引用的好处 C++使用结构体,不需要再使用 typedef. 2.值传递是将实参进行拷贝,赋值给形参,如果对象比较大,每次拷贝效率比较低,并且函数内部无法修改外部变量的值,能力 ...
- nyoj 311-完全背包 (动态规划, 完全背包)
311-完全背包 内存限制:64MB 时间限制:4000ms Special Judge: No accepted:5 submit:7 题目描述: 直接说题意,完全背包定义有N种物品和一个容量为V的 ...
- NetCore3.0 文件上传与大文件上传的限制
NetCore文件上传两种方式 NetCore官方给出的两种文件上传方式分别为“缓冲”.“流式”.我简单的说说两种的区别, 1.缓冲:通过模型绑定先把整个文件保存到内存,然后我们通过IFormFile ...
- Kali Rolling 系统配置总结 (Updateing)
主系统Kali Linux确实好用,继<Kali~2018安装后的配置>之后,自己又全面详细的总结了关于Kali Linux系统安装后的配置,<Kali Rolling 系统配置总结 ...
- oracle:表重命名
SQL> rename test1 to test; Table renamed. SQL> alter table test rename to test1; Table altered ...
- Linux进程管理(ps、pstree、top、pidof、kill、nice、free)
进程号(Process ID,PID) 1.ps命令(process status) 无选项时只显示从当前终端当前用户的进程 ps aux 是用BSD的格式来显示 java这个进程显示的项目有:USE ...
- 反汇编分析NSString,你印象中的NSString是这样吗
我们先来定义三个NSString -(void) testNSString { NSString* a = @"abc"; NSString* b = [NSString stri ...
- ubuntu 16.04安装并启动openssh
对于没有图形界面的linux系统,一般都会用到远程连接控制,,因此新安装的linux系统,在配好网络后,首先要安装的就是远程连接工具,ssh是常用的方法. ps -ef |grep ssh //查看 ...