常用API-Object类、Objects类

个人简介

  • 大家好,我是翰慧腾。一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教。💙
  • 欢迎点赞+收藏+留言💜
  • 想要和得到中间还有一步叫做到🧡

一、Object类

  • 任何一个类要么默认继承了Object类,要么间接继承了Object类,Object类是java中祖宗类,因此,Object类中的方法是可以供任何类使用的。
  • Object类常用方法

1.toString方法

下图是Object类中toString方法API文档

 Object类中的toString方法,代码如下

package Stickto;

public class toString {
	public static void main(String[] args) {
		aa s=new aa("小明",19);
		String ss=s.toString();//aa类默认继承Object类,可以直接调用该类中的toString方法
		System.out.println(ss);
        System.out.println(s);//toString方法可以省略,但效果完全一样
	}

}
class aa{
	String name;
	int age;
	public aa(){
		
	}
	public aa(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;
	}
	
}

输出结果:

 

 显而易见,未重写toString方法之前,调用toString方法会输出一个地址值。此处的toString方法是可以省略的,直接输出对象名也是同样的输出。在实际开发中我们并不需要地址值,而是需要对象对应的值,因此,就要对toString方法进行重写。

重写toString方法代码如下:

package Stickto;

public class toString {
	public static void main(String[] args) {
		aa s=new aa("小明",19);
		String ss=s.toString();
		System.out.println(ss);
		System.out.println(s);
	}

}
class aa{
	String name;
	int age;
	public aa(){
		
	}
	public aa(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//对Object类中的toString方法进行重写,可以自定义调用toString方法后的输出内容
	public String toString() {
		return "aa [name=" + name + ", age=" + age + "]";
	}
	
}

结果:

 2.equals方法

Object类中equals方法API文档:

该方法默认比较的是对象的地址是否相同 ,但是在实际开发中比较两个两个对象的地址用==就可以完成。通常我们会将equals方法进行重写,来自定义比较规则。

重写toString方法代码如下:

package Stickto;

import java.util.Objects;

public class toString {
	public static void main(String[] args) {
		aa s=new aa("小明",19);
		aa s1=new aa("小明",19);
		String ss=s.toString();
		System.out.println(ss);
		System.out.println(s.equals(s1));//true
		
	}

}
class aa{
	String name;
	int age;
	public aa(){
		
	}
	public aa(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 String toString() {
		return "aa [name=" + name + ", age=" + age + "]";
	}
	@Override
	public boolean equals(Object obj) {
		//检验比较的是否是同一个对象,同一个对象内容一定相等 
		if (this == obj)//this指的是调用该方法的对象
			return true;
		//检验比较的是否空值,与空值比较一定返回false
		if (obj == null)
			return false;
		//检验比较的两个类型是否为同一个类型,若为同一个类型才可以进行内容的比较,不是同一个类型一定返回false
		if (getClass() != obj.getClass())//getClass是取其类型
			return false;
		aa other = (aa) obj;//将object类型的obj强转类型为aa类型
		return age == other.age && Objects.equals(name, other.name);//对年龄和姓名内容进行比较
	}
	/** Objects类中的equals方法源码如下
	 	public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }*/
	
}

IDE都会自动生成toString和equals方法的重写,equals方法用来比较对象的内容是否相等。

二、Objects类

  • 首先不能被这个名字所误导,它和大多数类一样也继承着Object类,该类是从jdk1.7之后才有的。

1.equals方法

  • Objects类中equals方法API文档
  • Objects类中的equals方法源码如下
         
     //Objects类中的equals方法源码如下
    	 	public static boolean equals(Object a, Object b) {
            return (a == b) || (a != null && a.equals(b));
        }

  • 上述代码中的重写toString方法已经用到了Objects.equals类,很多小伙伴可能会不理解,好奇为什么不用Object类的equals方法。其实这两个类中的equals方法比较的结果是一样的,但是Objects类下的该方法更安全。Object类下equals方法会有如下情况:

 

 当调用该方法的对象为null的时候,会出现如图所示的报错。但是使用Objects类并不会出现这种情况。所以,我们通常会选择更安全的Objects类中的equals方法。(调用该方法也应该重写Object类中的equals方法)

多说无用,上代码!

package Stickto;

import java.util.Objects;

public class toString {
	public static void main(String[] args) {
		aa s=new aa("小明",19);
		aa s1=new aa("小明",19);
		System.out.println(Objects.equals(s, s1));
		
	}

}
class aa{
	String name;
	int age;
	public aa(){
		
	}
	public aa(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 String toString() {
		return "aa [name=" + name + ", age=" + age + "]";
	}
	@Override
	public boolean equals(Object obj) {
		//检验比较的是否是同一个对象,同一个对象内容一定相等 
		if (this == obj)//this指的是调用该方法的对象
			return true;
		//检验比较的是否空值,与空值比较一定返回false
		if (obj == null)
			return false;
		//检验比较的两个类型是否为同一个类型,若为同一个类型才可以进行内容的比较,不是同一个类型一定返回false
		if (getClass() != obj.getClass())//getClass是取其类型
			return false;
		aa other = (aa) obj;//将object类型的obj强转类型为aa类型
		return age == other.age && Objects.equals(name, other.name);//对年龄和姓名内容进行比较
	}
	/** Objects类中的equals方法源码如下
	 	public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }*/
	
}

2.isnull方法(判断变量是否为null)

API文档:

 源码如下::

 public static boolean isNull(Object obj) {
        return obj == null;
    }

上代码:

package Stickto;

import java.util.Objects;

public class isnull {
	public static void main(String[] args) {
		String a=null;
		String b="我爱JAVA";
		System.out.println(a==null);//true
		System.out.println(Objects.isNull(a));//true
		System.out.println(b==null);//false
		System.out.println(Objects.isNull(b));//false
	}
}

补充:

官方在String类已经重写了equals、toString方法。

toString方法API文档:

 源码:

   public String toString() {
        return this;
    }

代码:

package Stickto;

public class String_toString {
	public static void main(String[] args) {
		String a="键盘敲烂,月薪过万";
		System.out.println(a.toString());
		//之前输出字符串名输出对应内容就是因为String类重写了toString方法
	}
	
}

equals方法API文档:

 源码:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        return (anObject instanceof String aString)
                && (!COMPACT_STRINGS || this.coder == aString.coder)
                && StringLatin1.equals(value, aString.value);
    }

上代码:

package Stickto;

public class String_equals {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		String a="键盘敲烂";
		String b="月薪过万";
		System.out.println(a.equals(b));//false
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨四点半sec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值