1、Java比较存在那些方式呢?
第一种:==,第二种:equals,第三种:getClass
2、他们之间有哪些差别呢?
第一种==:应用于基础数据类型比较,第二种equals:应用于引用数据类型比较,第三种getClass:应用于导入的是否同一个对象的实例化
注:以上是主要的比较应用方面
3、他们比较的方式到底是怎么样呢?
==和equals比较的话,如果equals没有重写的话,那么他们比较的差不多一致。
注: ==比较内存位置是否一致,,equals比较的是对象是否是同一个对象。
getClass比较的就是 class+包名+类名组成一个识别,比较。
4、getClass使用方面
附测试类:
package com.briup.ch22;
public class GetClassTest
{
public static void main(String[] args){
Student s1 = new Student();
Student s2 = new Student();
System.out.println("输出GetClass内容:"+s1.getClass()+" "+s2.getClass());
}
}
class Student{
public String name = "张三";
}
注输出结果:
5、==和equals比较使用方面
== :一般比较内存位置是否一致的问题,比较针对于基础数据类型的话
equals:一般比较是否是同一个对象,(前提无重写equals)
附测试类:
package com.briup.ch22;
public class GetClassTest
{
public static void main(String[] args){
int a =1 , b =2 , c =3;
System.out.println(a == b);
System.out.println(b == c);
Student s1 = new Student();
Student s2 = s1;
System.out.println(s1 == s2);
s2 = new Student();
System.out.println(s1 == s2);
}
}
class Student
{
public String name;
public int age;
public String sex;
}
附测试类结果:
附equals测试类:
package com.briup.ch22;
public class GetClassTest
{
public static void main(String[] args){
Student s1 = new Student();
Student s2 = s1;
System.out.println(s1.equals(s2));
s2 = new Student();
System.out.println(s1.equals(s2));
}
}
class Student
{
public String name;
public int age;
public String sex;
}
附测试类结果:
结果分析:==比较的是对于引用数据的时候比较的其实是内存地址是否一致,equals比较的同==
6、如何重写equals方法?
步骤:查询java的API,查询equals在那个里面,然后我们就可以重写该方法,实现自定义判断识别。
查询结果equals在默认包(lang),util包(Comparable接口),所以我们实现该接口或者重写该方法
附代码测试类:
package com.briup.ch22;
public class GetClassTest
{
static class Student
{
public String name;
public int age;
public String sex;
public Student(String name,int age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
public Student(){
}
@Override
public boolean equals(Object obj){
///第一步判断是否为空对象
if(obj == null)
return false;
///第二步判断是否是同一个类是实例化对象
if(!obj.getClass().equals( this.getClass() ))
return false;
Student temp = (Student)obj;
if(temp.name.equals(this.name) && temp.age == this.age && temp.sex.equals(this.sex))
return true;
return false;
}
}
public static void main(String[] args){
Student s1 = new Student("张三",20,"男");
Student s2 = s1;
System.out.println(s1.equals(s2));
s2 = new Student("张三",20,"男");
System.out.println(s1.equals(s2));
s2.sex = "女";
System.out.println(s1.equals(s2));
}
}
附结构测试类: