荐 Java Object类的使用介绍
Object类
一、Object类概述
- Object类是所有类的父类,Java中的所有类都直接与间接的继承了Object类。
- 如果一个类没有指定父类,那么默认继承Object类
二、toString方法
返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。
结果应是一个简明但易于读懂的信息表达式。
1.方法摘要
方法信息:
public String toString()
返回:
该对象的字符串表示形式。
2.重写toString方法
为什么要重写toString方法
当打印一个对象名称时,如果不重写toString方法,那么将会打印出对象的地址值,实际运用中意义不大,这是由Object类决定的。要想改为要想打印的信息,就必须对toString方法进行重写。
代码实例
新建Person类
public class Person [extends Object]{
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;}
/*
直接打印对象的地址值没有意义所以要重写Object类的toString方法
*/
@Override
public String toString() {
return "Person{name = "+ name+",age = "+age +"}";
}
//toString也可以使用集成开发环境直接生成
}
新建测试类,使用toString方法
public class TestToString{
public static void main(String[] args) {
//Person类默认继承Object类,所以我们可以使用Object类的toString方法(返回值为String)
Person p = new Person("张三丰",18);
//如果在Person中没有重写toString方法,则打印对象的地址值
//如果在Person对toString方法进行了重写,则按照指定格式打印
System.out.println(p.toString());
System.out.println(p);
}
}
【tips】
看一个类是否重写了toString方法,直接打印这个对象名
如果直接打印出地址值说名没有重写toString方法
如果重写了toString方法,会按照指定格式输出
三、equals方法
指示
其他某个对象是否与此对象“相等”
。
源码:
public boolean equals (Object obj){
return (this == obj);
}
1.方法摘要
方法信息:
public boolean equals(Object obj)
参数:
obj - 要与之比较的引用对象
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
2.默认地址值比较
继续使用上述Person类
新建测试类,使用equals方法
public class TestEquals {
public static void main(String[] args) {
/*
Person类默认继承Object类,所以可以使用equals方法,指示另外一个对象与当前对象是否相等
*/
Person p1 = new Person("张三",18);
Person p2 = new Person("李四",20);
System.out.println(p1.equals(p2));//打印结果:false
//把p2赋值给p1
p1 = p2;
System.out.println(p1.equals(p2));//打印结果:true
}
}
【tips】
对于
基本数据类型
,比较的是值
对于引用数据类型
,比较的是地址值
3.对象内容比较
和toString方法一样,equals方法也是使用的地址值进行比较,意义不大。要
进行对象属性的比较,依旧需要重写equals方法
。
在Person类中重写equals方法(集成开发环境也可以生成,推荐自己写一下,体会原理)
@Override
public boolean equals(Object obj) {
//增加判断,如果对象参数为自己,直接返回true
if(obj == this){
return true;
}
//增加判断,如果对象为空,直接返回false,提高程序运行效率
if(obj == null){
return false;
}
//增加判断,防止类转换异常
if(obj instanceof Person){
//使用向下转型,才可以使用子类特有的属性和方法
Person p = (Person)obj;
//比较两个对象的属性
boolean b = this.name.equals(p.name) && this.age == p.age;
return b;
}
修改测试类
public class TestEquals {
public static void main(String[] args) {
/*
Person类默认继承Object类,所以可以使用equals方法,指示另外一个对象与当前对象是否相等
源码:
public boolean equals (Object obj){
return (this == obj);
}
*/
Person p1 = new Person("张三",18);
Person p2 = new Person("张三",18);
System.out.println(p1.equals(p2));//打印结果:true
//虽然是两个对象,但是他们的内容一样。
//根据我们重写的equals方法,所以返回true
}
四、Objects类
从 jdk1.7 开始,才有Objects类
类的基本信息
public final class Objects extends Object
该类由一些静态方法组成,并声明为最终类不可被其他类继承。
这些方法是 null -safe(空指针安全的)或 null(容忍空指针的)方法。
计算对象的hashcode,为对象返回一个字符串,并比较两个对象。
public class DemoObjects {
public static void main(String[] args) {
String str1 = null;
String str2 = "csdn";
//使用String类的equals方法比较
System.out.println(str1.equals(str2));//发生空指针异常,代码报错
//使用Objects类的equals方法比较
System.out.println(Objects.equals(str1,str2));//程序正常运行,false
}
}
本文地址:https://blog.csdn.net/weixin_44580492/article/details/107326725
下一篇: mysql(源码)安装