特别说明:若是有不对的地方欢迎指正
简要概述:
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-11-10 07:05:21