学习笔记:Object类(toString 和 equals 方法)
Object类是一个特殊的类,是所有类、数组(数组和对象都是引用类型,都储存在对内存中)、枚举类的父类(任何Java对象都可以调用Object类的方法),一个类如果没有显式声明继承于某个类,那么他将默认继承object类。
Object.java源码中,这样描述Object类:“Object是类层次结构的根。每个类都有@code对象作为超类。所有对象,包括数组,实现该类的方法。”
他有一个构造方法,用来构造i一个新的对象:
public Object() {}
Object类主要包含11个方法;
①public String toString();
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
jdk源码中,这样描述toString方法:“返回对象的的字符串表示。一般来说, toString方法返回一个字符串“文本表示”这个对象。结果应该成为一个简洁但信息丰富的代表,这很容易读的人。建议所有的子类都覆盖这个方法。”,该字符串内容就是对象的类型aaa@qq.com+内存地址值。
在实际开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此每个实体类也需要重写它,重写格式一般为显示实体类属性值,可作为测试使用。
在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate... ,也可以使用快捷键 alt+insert ,点击 toString() 选 项。选择需要包含的成员变量并确定。
例如自定义的Person类,如下所示:
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
// 省略构造器与Getter Setter
}
Ps:直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法
②public boolean equals(Object obj) ;
public boolean equals(Object obj) {
return (this == obj);
}
jdk源码中,这样描述equals方法:"表示其他对象是否“等于”这个",其比较的的对象的内存地址,与对象内容无关。
【关于 == 和 equals 的区别:https://www.cnblogs.com/dolphin0520/p/3592500.html】
如需对象内容的比较,则需重写equals方法(开发中,比较地址值直接用 == 就足够了,equals 一般用来比较有意义的东西
)。
import java.util.Objects;
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
// 省略构造器与Getter Setter
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
}
【 Objects类
在刚才IDEA自动重写equals代码中,使用到了 java.util.Objects 。
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是 null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表 示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问 题。方法如下:
public static boolean equals(Object a, Object b) :判断两个对象是否相等。
源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
例:
public static void main(String[] args) {
/*
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
|| : 左边为true,右边不执行
空指针安全
*/
String s1 = "abc";
String s2 = null;
// boolean result = s1.equals(s2); // 空指针 java.lang.NullPointerException
boolean equals = Objects.equals(s1, s2);
System.out.println(equals);
}
】
上一篇: nginx-http-flv编译配置
下一篇: rtmp之谷歌浏览器默认启用flash
推荐阅读
-
荐 java父类-Object类-equals与==-方法的重载和重写-游离块-this关键字
-
【Java基础学习笔记】5、类、对象和方法
-
Objective-C学习笔记2:类、对象和方法
-
PAI中的Object类、toString、equals方法
-
Java:object类 中常用equals()和 toString()方法的重写
-
java类中的equals、hashCode和toString方法
-
Object最高父类的方法应用 equals和toString
-
java中Object类的方法之toString 、equals
-
Object类中的equals()、toString()的使用和== 和 equals() 区别
-
荐 java父类-Object类-equals与==-方法的重载和重写-游离块-this关键字