Object对象 equals()方法

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

Object类中的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     }

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字符串数组,

扫描二维码关注公众号,回复: 2426890 查看本文章

所以运行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     }

图解

当运行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     }
复制代码

图解:

插一段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

猜你喜欢

转载自www.cnblogs.com/a709898670/p/9381425.html