当前位置 : 主页 > 编程语言 > c语言 >

object和equals

来源:互联网 收集:自由互联 发布时间:2023-09-06
1. Object详解 1.1 == 比较细节 318 1.1.1 例 == 判断引用类型,判断地址是否相等 318 代码在com.stulzl.object_.包中 Object_equals package com.stulzl.object_;//判断引用类型,判断地址是否相等 318public cla

1. Object详解

1.1 == 比较细节 318

object和equals_ci

1.1.1 例 == 判断引用类型,判断地址是否相等 318

代码在com.stulzl.object_.包中

Object_equals
package com.stulzl.object_;

//判断引用类型,判断地址是否相等 318
public class Object_equals {
    public static void main(String[] args) {
        A a = new A();
        A b = a;
        A c = a;
        System.out.println(a==c);//true//因为a b c都指向同一块对象对应的地址空间
        System.out.println(b==c);//true
        B bObj = a;
        System.out.println(bObj==c);//true//同理
    }
}
class B {

}
class A extends B{

}

1.2 equals相关及查看原码

1.2.1 查看原码 319

object和equals_System_02

object和equals_引用类型_03

1.2.2 equals方法和==的对比 320

代码在com.stulzl.object_equals.包中

Equals
package com.stulzl.object_equals;

public class Equals {
    public static void main(String[] args) {

        //equals 方法,源码怎么查看. //把光标放在 equals 方法,直接输入 ctrl+b
        //如果你使用不了. 自己配置. 即可使用.
       "hello".equals("abc");

        //引用类型
       Integer integer1 = new Integer(1000);
       Integer integer2 = new Integer(1000);
       System.out.println(integer1==integer2);//fasle  //判断地址
       System.out.println(integer1.equals(integer2));//true//判断内容,因为Integer重写了equals

       String str1 = new String("lzl");
       String str2 = new String("lzl");
       System.out.println(str1==str2);//false 判断地址
       System.out.println(str1.equals(str2));//true判断内容 因为String重写了equals
    }
}

2.小练习

2.1 自己重写Object的equals方法练习 321

应用实例: 判断两个 Person 对象的内容是否相等,如果两个 Person 对象的各个属性值都一样,则返回 true,反之 false。

代码在com.stulzl.object_equalsexercise01.包中

EqualsExercise

package com.stulzl.object_equalsexercise01;

//自己重写Object的equals方法练习
//应用实例: 判断两个 Person 对象的内容是否相等,如果两个 Person 对象的各个属性值都一样,
// 则返回 true,反之 false。
public class EqualsExercise {
    public static void main(String[] args) {
        Person person1 = new Person("jack", 18, '男');
        Person person2 = new Person("jack", 18, '男');
        System.out.println(person1.equals(person2));//true
    }
}
class Person{
    private String name;
    private int age;
    private char gender;

    //重写Object中的equals方法
    public boolean equals(Object obj){//obj编译类型Object,运行类型是Person
        //判断对象是否是一个对象,如果是直接返回true
        if(this==obj){//这里this指的对象,是谁调用equals方法就是谁
            return true;
        }
        //判断是否为同Person类,是同Person类才进入比较 各个属性
        if(obj instanceof Person){//注:instanceof,是比较运行对象是否为某某的类型或者子类
            Person p = (Person)obj;//向下转型,这里把原本是Object类型的obj转成了Person类
            return this.name.equals(p.name) && this.age==p.age && this.gender==p.gender;
        }
        //如果不是通Person类,直接返回false
        return false;
    }

    public Person(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    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;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }
}

2.2 练习2 判断输出 322

代码在com.stulzl.object_equalsexercise02.包中

EqualsExercise02

package com.stulzl.object_equalsexercise02;

public class EqualsExercise02 {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name="lzl";

        Person p2 = new Person();
        p2.name ="lzl";
        System.out.println(p1==p2);//false//判断的是引用类型,判断地址
        System.out.println(p1.name.equals(p1.name));//true,p1.name和p1.name是字符串,
                                                    // 而字符串已经重写了equals
        System.out.println(p1.equals(p2));//false//p1,p2是Person类这个equals来自于父类Object

        String s1 = new String("abc");
        String s2 = new String("abc");
        System.out.println(s1.equals(s2));//true//字符串类String已经重写了equals
        System.out.println(s1==s2);//false//引用类型,s1和s2指的不是同一对象即地址不同
    }
}
class Person{
    public String name;
}

2.3 练习3 判断输出 323

代码在com.stulzl.object_equalsexercise03.包中

EqualsExercise03

package com.stulzl.object_equalsexercise03;

//判断输出323
public class EqualsExercise03 {
    public static void main(String[] args) {
        int it = 65;
        float fl = 65.0f;
        System.out.println("65 和 65.0f 是否相等?" + (it == fl));//T
        char ch1 = 'A'; char ch2 = 12;
        System.out.println("65 和‘A’是否相等?" + (it == ch1));//T 字符的本质就是一个数
        System.out.println("12 和 ch2 是否相等?"+ (12 == ch2));//T
        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println("str1 和 str2 是否相等?"+ (str1 == str2)); //F
        System.out.println("str1 是否 equals str2?"+(str1.equals(str2)));//T
        //System.out.println("hello" == new java.sql.Date()); //编译错误
    }
}
【本文来源:韩国服务器 http://www.558idc.com/kt.html欢迎留下您的宝贵建议】
网友评论