首页 > 其他分享 >object和equals

object和equals

时间:2023-05-02 15:05:30浏览次数:36  
标签:String object System equals Person println out

1. Object详解

1.1 == 比较细节 318

object和equals_Object

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_ci_02

object和equals_System_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()); //编译错误
    }
}

标签:String,object,System,equals,Person,println,out
From: https://blog.51cto.com/u_15784725/6239949

相关文章

  • Objective-C的反射
    http://blog.sina.com.cn/s/blog_6d723b1f0100q6m6.html  我第一次接触Java的时候就觉得整个反射包都很新颖,它使得Java和解释型的脚本语言更接近了,与此同时也拉开了和主流的C和C++的距离。在运行时可以窥视到一个对象的类元数据真的很不可思议,尽管这些可能不会在日常应用编程中......
  • Object-oriented Programming
    Object-orientedProgrammingSource:WhatIsObject-OrientedProgramming(OOP)?ACompleteGuideWhatisOOPObject-orientedprogrammingisaprogrammingparadigm[1],orclassification,thatorganizesagroupofdataattributeswithfunctionsormethodsin......
  • Java的Object类
    Object类Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的。但是并不需要这样写:publicclassEmployeeextendsObject如果没有明确地指出父类,Object就被认为是这个类的父类。所有的数组类型,不管是对象数组还是基本类型的数组都扩展了Object类。Employe......
  • Java的Object类
    Object类Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的。但是并不需要这样写:publicclassEmployeeextendsObject如果没有明确地指出父类,Object就被认为是这个类的父类。所有的数组类型,不管是对象数组还是基本类型的数组都扩展了Object类。Employ......
  • apollo启动报错java.lang.NoClassDefFoundError PemObjectGenerator
    启动apollo时,报错。java.lang.NoClassDefFoundError:org/bouncycastle/util/io/pem/PemObjectGenerator很明显类没找到,根据经验判断,很可能是maven依赖问题。解决方案apollo版本1.1.4。目前相关的是:org.bouncycastle:bcpkix-jdk15on:jar:1.55org.bouncycastle:bcprov-jdk15on:jar......
  • SWEN20003 Object Oriented软件开发
    SWEN20003ObjectOrientedSoftwareDevelopmentProject2,2023TheUniversityofMelbourneSchoolofComputingandInformationSystemsSWEN20003ObjectOrientedSoftwareDevelopmentShadowPacProject2,Semester1,2023Released:Friday,21stApril2023at4:30......
  • 【git基础问题】LFS upload missing objects
    前言 修改文件权限;还是不行;修改文件权限之后,使用gitpush就可以了;gitpush-uorigintda4dev#好像ok了gitlfspush--allorigintda4dev#notok   参考1. 完......
  • access 查询报“提供程序无法确定 Object 值.例如,该行刚刚创建,未提供 Object 列的默
    access查询报“提供程序无法确定Object值.例如,该行刚刚创建,未提供Object列的默认值,并且”System.InvalidOperationException:TheprovidercouldnotdeterminetheObjectvalue.Forexample,therowwasjustcreated,thedefaultfortheObjectcolumnwasnota......
  • 【git基础问题】LFS upload missing objects
    前言 修改文件权限;还是不行;修改文件权限之后,使用gitpush就可以了;gitpush-uorigintda4dev#好像ok了gitlfspush--allorigintda4dev#notok   参考1. 完......
  • 类型体操-Tuple to Object
    刷类型体操时,问题的记录及收获TupletoObjectconsttuple=['tesla','model3','modelX','modelY']asconsttyperesult=TupleToObject<typeoftuple>//expected{'tesla':'tesla','model3�......