JAVA之equals方法与tostring方法

时间:2022-05-15 16:24:10

 equals本意:

即在Object对象中定义的equals()方法有什么样的意义。

 

equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。

Object类中的equals方法内部使用的就是==比较运算符。

JAVA之equals方法与tostring方法

在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。

如下代码演示:

 1 public class Person {  2     private String name;  3     private int age;  4  Person(){  5         
 6  }  7     Person(String name,int age){  8         this.name=name;  9         this.age=age; 10  } 11 
12     public boolean equals(Object obj) {//Object obj=new Person(); 13         //调用子类都有的成员,需要向下转型
14         if(obj==null){ 15             return false; 16  } 17         if(obj==this){ 18             return true; 19  } 20         if(obj instanceof Person ){ 21             Person p=(Person)obj; 22             return this.age==p.age; 23  } 24         return false; 25     }

注意:

在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,

在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

 

toString方法

JAVA之equals方法与tostring方法

 

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值

 1 public class Demo01 {  2 
 3     public static void main(String[] args) {  4         Person p1=new Person("熊大",2);  5         Person p2=new Person("熊二",2);  6         ArrayList<String> list=new ArrayList<String>();  7         System.out.println(p1==p2);  8  System.out.println(p1.equals(list));  9         System.out.println(p1);//默认打印tostring() 子类方法重写后 就变成子类重写方法
10  System.out.println(p2); 11     }

 String类

创建的相同String数组地址是一样的,在运行str时已经存在abc字符串数组,

所以运行str2的时候会先去找这个数组存不存在,如果已经有了则他的地址直接拿过来用

所以str与str2的地址与内容都是一样的

1     public static void main(String[] args) { 2         String str="abc"; 3         //str="efg"; 4         //String str1=new String("abc");
5         String str2="abc"; 6         System.out.println(str==str2); 7  System.out.println(str.equals(str2)); 8     }

图解:

JAVA之equals方法与tostring方法

 

当运行str的时候,在堆里分配一个数组地址,分为三块,这个地址给到str,

在运行str1的时候,也分配一个地址,因为内容一样 所以str的地址直接给到str1,

所以str与str1比较的时候,他们地址不一样而内容是一样的

1 public static void main(String[] args) { 2         String str="abc"; 3         //str="efg";
4         String str1=new String("abc"); 5         //String str2="abc";
6         System.out.println(str==str1); 7  System.out.println(str.equals(str1)); 8     }

图解:

JAVA之equals方法与tostring方法

插一段string的构造方法

 

1     public static void main(String[] args) { 2         //字节数组走的是GBK编码表(正数走ascII表,负数就是汉字(两个字节一个汉字))
3         byte[] bytes={97,98,99,100}; 4         String str=new String(bytes); 5         String str2=new String(bytes,1,2); 6  System.out.println(str2); 7         System.out.println(str);//abcd
8     }

 

下面是详细ascII码表:

 

48—0,65—A,97—a

JAVA之equals方法与tostring方法