首页 > 编程语言 >Java API:Object and Objects

Java API:Object and Objects

时间:2024-09-02 21:05:04浏览次数:10  
标签:Java name age Object equals API public String

Java API:Object and Objects

目录

1 Object

Object是类层次结构的根。 每个class都有Object作为超类。 所有对象(包括数组)都实现此类的方法。

1.1 常用方法

1.1 Object类的toString方法

public String toString()
  • 返回对象的字符串表示形式。 通常, toString方法返回一个“文本表示”此对象的字符串。
  • 建议所有子类都覆盖此方法。
  • ObjecttoString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“ @ ”以及对象的哈希码的无符号十六进制表示形式组成。 换句话说,此方法返回一个等于值的字符串:
    • getClass().getName() + '@' + Integer.toHexString(hashCode())

1.1.1 示例

package com.fcarey.api;

public class Person {
    private String name;
    private int age;
    public Person() {}

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

    @Override
    public String toString() {
        return "ToStringDemo [name=" + name + ", age=" + age + "]";
    }
}


package com.fcarey.api;

public class ToStringDemo {
    public static void main(String[] args) {
        Person tsd = new Person();
        tsd.setName("ToString Demo");
        tsd.setAge(20);
        System.out.println(tsd);
        System.out.println(tsd.toString());
    }
}

// 输出:
// ToStringDemo [name=ToString Demo, age=20]
// ToStringDemo [name=ToString Demo, age=20]

1.2 equals

public boolean equals​(Object obj)  // 指示某个其他对象是否“等于”此对象。
  • equals方法在非null对象引用上实现等价关系:

    • 自反性:对于任何非空的参考值xx.equals(x)应该返回true

    • 对称性 :对于任何非空引用值xyx.equals(y)应该返回true当且仅当y.equals(x)回报true

    • 传递性 :对于任何非空引用值xyz ,如果x.equals(y)回报truey.equals(z)回报true ,然后x.equals(z)应该返回true

    • 它是一致的 :对于任何非空引用值xy ,多次调用x.equals(y)始终返回true或始终返回false ,前提是未修改对象上的equals比较中使用的信息。

    • 对于任何非空的参考值xx.equals(null)应该返回false

  • Objectequals方法实现了对象上最具区别的可能等价关系; 也就是说,对于任何非空引用值xy ,当且仅当xy引用同一对象( x == y具有值true )时,此方法返回true

  • 重写equals方法的场景:不希望比较对象的地址值,想要结合对象属性进行比较的时候。

    • 请注意:通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希代码。

1.2.1 示例

package com.fcarey.api;

import java.util.Objects;

public class Person {
    private String name;
    private int age;
    public Person() {}

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

    @Override
    public String toString() {
        return "ToStringDemo [name=" + name + ", age=" + age + "]";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}


package com.fcarey.api;

public class EqualsDemo {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("user");
        person.setAge(20);

        Person person2 = new Person();
        person2.setName("user");
        person2.setAge(20);
        System.out.println(person.equals(person2));
    }
}

1.2.2 面试题

package com.fcarey.api;
// 看程序,分析结果


public class Test {

    public static void main(String[] args) {
        String s = "abc";
        StringBuilder sb = new StringBuilder();
        sb.append("abc");
        // 1.此时调用的是String类中的equals方法.
        // 保证参数也是字符串,否则不会比较属性值而直接返回false
        System.out.println(s.equals(sb));  // false

        //  StringBuilder类中是没有重写equals方法,用的就是Object类中的.
        System.out.println(sb.equals(s)); // false

        // 此时比较的是内容
        System.out.println(s.contentEquals(sb));  // true
    }
}

2 Objects

  • 此类包含static实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括nullnull方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。

  • 常用方法:

    变量和类型 方法 描述
    static boolean deepEquals(Object a, Object b) 返回 true如果参数是深层相等,彼此 false其他。
    static boolean equals(Object a, Object b) 返回 true如果参数相等,彼此 false其他。
    static boolean isNull(Object obj) 返回 true如果提供的参考是 null ,否则返回 false
    static boolean nonNull(Object obj) 返回 true如果提供的参考是非 null否则返回 false
    static String toString(Object o) 返回调用的结果 toString对于非 null参数, "null"null的说法。
    static String toString(Object o, String nullDefault) 如果第一个参数不是 null ,则返回在第一个参数上调用 toString的结果,否则返回第二个参数。

2.1 示例

package com.fcarey.api;

import java.util.Objects;

public class Person {
    private String name;
    private int age;
    public Person() {}
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    @Override
    public String toString() {
        return "ToStringDemo [name=" + name + ", age=" + age + "]";
    }
}


package com.fcarey.api;

import java.util.Objects;

public class MyObjectsDemo {
    public static void main(String[] args) {
        Person person = new Person("abc",22);
        person = null;
        String s = Objects.toString(person,"没有东东");
        System.out.println(s);  // 输出:没有东东

        Person person2 = new Person();
        boolean res = Objects.isNull(person2);
        System.out.println(res);  // 输出:false

        boolean res2 = Objects.nonNull(person2);
        System.out.println(res2);  // 输出:true

    }
}

标签:Java,name,age,Object,equals,API,public,String
From: https://www.cnblogs.com/f-carey/p/18386636

相关文章

  • Java API:BigDecimal
    JavaAPI:BigDecimal目录JavaAPI:BigDecimal1BigDecimal2示例1BigDecimalBigDecimal类使用户完全控制舍入行为。如果未指定舍入模式,并且无法表示确切的结果,则抛出异常;否则,可以通过向操作提供适当的MathContext对象来进行计算,以选择精度和舍入模式。在这两种情况下,都......
  • 浙江省会计人员继续教育刷课脚本-JavaScript编写
    脚本学习网站:浙江省会计人员继续教育:https://jxjy.czt.zj.gov.cn/front/jxjy.html脚本地址:浙江省会计人员继续教育-刷课脚本:https://greasyfork.org/zh-CN/scripts/506412-浙江省会计人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间那个蓝色......
  • Java中的一些思想
    Java中的一些思想目录Java中的一些思想1分类思想2分包思想3类与类之间的访问4static关键字4.1static修饰的特点4.2注意事项5信息管理系统5.1系统说明5.1.1学生管理系统5.1.2老师管理系统5.2实现步骤5.3代码实现5.3.1Student5.3.2Teacher1分类思想分工协作,专人......
  • java ThreadLocal做线程隔离
    `ThreadLocal`类提供了线程局部变量,每个线程都可以独立地访问自己的变量副本,而不会影响其他线程的副本。这在多线程环境中非常有用,可以避免线程间的数据共享和竞争条件,提高程序的线程安全性。###ThreadLocal的用法:1.**创建ThreadLocal对象**:首先需要创建一个`ThreadLocal`......
  • java并发 第四章共享模型之管程 3 synchronized 原理
    1.轻量级锁轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是synchronized假设有两个方法同步块,利用同一个对象加锁 staticfinalObjectobj=newObject();......
  • 浙江省住房和城乡建设行业继续教育刷课脚本-JavaScript编写
    脚本学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page脚本地址:浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本:https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器......
  • 浙江省建设人才远程继续教育平台刷课脚本-JavaScript编写
    脚本学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page脚本地址:浙江省建设人才远程继续教育平台刷课脚本:https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间......
  • 深入理解HTTP连接池及其在Java中的应用
    更多内容前往个人网站:孔乙己大叔        在现代的Web开发中,HTTP请求已经成为应用程序与外部服务交互的主要方式。随着微服务架构的流行,一个应用可能需要同时与多个外部服务进行通信,这导致HTTP请求的数量显著增加。为了提升性能和资源利用率,HTTP连接池成为了一个不可......
  • 【网络安全 | Java代码审计】Code-Breaking Puzzles-javacon
    未经许可,不得转载。源码:https://www.leavesongs.com/media/attachment/2018/11/23/challenge-0.0.1-SNAPSHOT.jar,下载至桌面。考察知识点:SpEL注入正文执行命令运行环境:java-jarC:\Users\86177\Desktop\challenge-0.0.1-SNAPSHOT.jar浏览器访问localhost:8080使用JD-......
  • Java生产环境下性能监控与调优指南
    Java生产环境下性能监控与调优指南目录引言Java性能监控2.1性能监控工具2.2关键性能指标Java应用性能调优3.1内存调优3.2垃圾回收调优3.3多线程优化3.4数据库连接优化3.5代码级优化结语1.引言在Java应用的生产环境下,性能监控及调优显得至关重要,它们......