Java语言根类:Object类
1,概述
在Java.lang.Object下,是Java语言的根类,即所有类的父类,所有对象(包括数组)都实现了这个类的方法。
2,类当中的方法
String toString():
含义:返回对象的字符串表示,默认打印出地址值。可进行重写,重写时打印出对象的属性。
package day4_27;
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@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);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
注意:判断一个类是否重写了toString方法,直接打印这个类对象名字即可,若重写了toSring方法,则会按重写方式打印。
package day4_27;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class demo1toString {
public static void main(String[] args) {
// 调用toString方法和打印对象名效果一致
Person p = new Person("小莫", 25);
System.out.println(p); /*day4_27.Person@75412c2f Person{name='小莫', age=25}(重写toString)*/
String s = p.toString();
System.out.println(s); /*day4_27.Person@75412c2f Person{name='小莫', age=25}(重写toString)*/
Random rd = new Random();
System.out.println(rd); /*java.util.Random@7f63425a Random类未重写toString()方法*/
Scanner sr = new Scanner(System.in);
System.out.println(sr); /*java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0]*/
ArrayList<Integer> list = new ArrayList<>();
list.add(2);
list.add(45);
System.out.println(list); /*[2, 45]*/
}
}
boolean equals(Object obj):
含义:指示其他某个对象是否与该对象相等,比较地址值,参考意义不大。源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
==:比较运算符,返回布尔值。若是基本类型,则比较值是否相同;若是引用数据类型,则比较两对象地址值是否相同。
重写equals方法:比较两对象的属性值是否相同,一样则返回true。重写源码如下:
@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);
}
public class demo1equals {
public static void main(String[] args) {
Person p1 = new Person("小海",23);
Person p2 = new Person("小海",23);
boolean result = p1.equals(p2);
System.out.println(result); /*重写后:true*/
}
}
Objects工具类:equals方法
由一些静态方法组成,故通过类调用方法,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),可对两个对象进行比较,防止空指针异常。源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
package day4_27;
import java.util.Objects;
public class demo1Objects {
public static void main(String[] args) {
// public static boolean equals(Object a, Object b) {
// return (a == b) || (a != null && a.equals(b));
// }
String a = null;
String b = "abc";
// System.out.println(a.equals(b)); 报错
System.out.println(Objects.equals(a,b)); /*false*/
}
}