您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java - Objects工具类

时间:2020-07-24 09:20:07  来源:  作者:

Objects类是JAVA.util包下的一个工具类,它只拥有私有的构造函数,因此无法对其进行实例化,但它提供了一系列针对object对象的静态方法,包括equal,hash, 参数检查等。

Java - Objects工具类

Objects类的所有静态方法

下面对这个工具类的静态方法做具体的介绍:

  • equals方法

判断2个object对象是否相等。

/* Since 1.7 */ 
public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
}

例子:

    private static void testEquals() {
        System.out.println("null equals null:" + Objects.equals(null,null));
        System.out.println("1 equals null:" + Objects.equals(1,null));
        System.out.println("null equals 1:" + Objects.equals(null,1));
        System.out.println("ABC equals ABC:" + Objects.equals("ABC","ABC"));
        System.out.println("1 equals ABC:" + Objects.equals(1,"ABC"));
    }

输出结果:

null equals null:true
1 equals null:false
null equals 1:false
ABC equals ABC:true
1 equals ABC:false
  • deepEquals方法

判断2个对象是否相等,如果是对象是数组,将会对数组的元素进行比较。

  /* Since 1.7 */   
  public static boolean deepEquals(Object a, Object b) {
        if (a == b)
            return true;
        else if (a == null || b == null)
            return false;
        else
            return Arrays.deepEquals0(a, b);
    }

例子:

    private static void testDeepEquals() {
        System.out.println("null equals null:" + Objects.deepEquals(null,null));
        System.out.println("1 equals null:" + Objects.deepEquals(1,null));
        System.out.println("null equals 1:" + Objects.deepEquals(null,1));
        System.out.println("ABC equals ABC:" + Objects.deepEquals("ABC","ABC"));
        System.out.println("1 equals ABC:" + Objects.deepEquals(1,"ABC"));
        System.out.println("string array equals string array:" + Objects.deepEquals(new String[]{"1","2"},new String[]{"1","2"}));
        System.out.println("int array equals string array:" + Objects.deepEquals(new Integer[]{1,2},new String[]{"1","2"}));
    }

输出结果:

null equals null:true
1 equals null:false
null equals 1:false
ABC equals ABC:true
1 equals ABC:false
string array equals string array:true
int array equals string array:false
  • hashCode方法

获取对象的hash码,如果object为null,返回0。

/* Since 1.7 */ 
public static int hashCode(Object o) {
     return o != null ? o.hashCode() : 0;
}

例子:

    private static void testHashCode() {
        System.out.println("hash for int:" + Objects.hashCode(1));
        System.out.println("hash for string:" + Objects.hashCode("1"));
        System.out.println("hash for long:" + Objects.hashCode(1L));
        System.out.println("hash for double:" + Objects.hashCode(1D));
        System.out.println("hash for null:" + Objects.hashCode(null));
    }

输出:

hash for int:1
hash for string:49
hash for long:1
hash for double:1072693248
hash for null:0
  • hash方法

计算数组的hash值(since 1.7)。

   /* Since 1.7 */  
   public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }

例子:

    private static void testHash() {
        System.out.println("int array hash:" + Objects.hash(1,2,4));
        System.out.println("string array hash:" + Objects.hash("1","2","4"));
        System.out.println("mixed array hash:" + Objects.hash("1",2,"4"));
    }

输出:

int array hash:30818
string array hash:78482
mixed array hash:76994
  • toString方法

把object对象转换成字符串。

   /* Since 1.7 */  
   public static String toString(Object o) {
        return String.valueOf(o);
    }
   /* Since 1.7 */ 
    public static String toString(Object o, String nullDefault) {
        return (o != null) ? o.toString() : nullDefault;
    }

例子:

    private static void testToString() {
        System.out.println("int str:" + Objects.toString(1));
        System.out.println("double str:" + Objects.toString(1.01D));
        System.out.println("null:" + Objects.toString(null, "1000"));
    }

输出结果:

int str:1
double str:1.01
null:1000
  • compare方法

使用指定的Comparator来对2个值进行比较。

   /* Since 1.7 */ 
   public static <T> int compare(T a, T b, Comparator<? super T> c) {
        return (a == b) ? 0 :  c.compare(a, b);
    }

例子:

    private static void testCompare() {
        System.out.println("int compare 1:" + Objects.compare(1,2, Comparator.naturalOrder()));
        System.out.println("int compare 2:" + Objects.compare(1,2, Comparator.reverseorder()));
    }

输出结果:

int compare 1:-1
int compare 2:1
  • requireNonNull方法

如果object为null,将会抛出NullPointerException,否则返回它自身。

   /**
  * Since 1.7
  */ 
  public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }
	
  /**
  * Since 1.7
  */
    public static <T> T requireNonNull(T obj, String message) {
        if (obj == null)
            throw new NullPointerException(message);
        return obj;
    }
   
  /**
  * Since 1.8
  */
   public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
        if (obj == null)
            throw new NullPointerException(messageSupplier == null ?
                                           null : messageSupplier.get());
        return obj;
    }

例子:

    private static void testRequireNotNull() {
        System.out.println("not null:" + Objects.requireNonNull("ABC"));
        try {
            System.out.println("null:" + Objects.requireNonNull(null, "input is required1"));
        }catch(NullPointerException e){
            System.out.println("exception:" + e.getMessage());
        }

        try {
            System.out.println("null:" + Objects.requireNonNull(null, ()->"input is required2"));
        }catch(NullPointerException e){
            System.out.println("exception:" + e.getMessage());
        }
    }

输出结果:

not null:ABC
exception:input is required1
exception:input is required2
  • requireNonNullElse方法

如果object为null,返回默认值。

     /* since 9 */  
   public static <T> T requireNonNullElse(T obj, T defaultObj) {
        return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");
    }
    /* since 9 */  
    public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {
        return (obj != null) ? obj
                : requireNonNull(requireNonNull(supplier, "supplier").get(), "supplier.get()");
    }

例子:

    private static void testRequireNotNullElse() {
        System.out.println("null else:" + Objects.requireNonNullElse(null,"CEFG"));
        System.out.println("null else get:" + Objects.requireNonNullElseGet(null,()->"HYZ"));
    }

输出结果:

null else:CEFG
null else get:HYZ
  • isNull和notNull方法

判断是否为null。

     /* since 1.8 */ 
    public static boolean isNull(Object obj) {
        return obj == null;
    }

     /* since 1.8 */ 
   public static boolean nonNull(Object obj) {
        return obj != null;
    }

例子:

    private static void testNullAndNotNull() {
        System.out.println("null 1:" + Objects.isNull(null));
        System.out.println("null 2:" + Objects.nonNull(null));
        System.out.println("not null 1:" + Objects.isNull("ABC"));
        System.out.println("not null 2:" + Objects.nonNull("ABC"));
    }

输出结果:

null 1:true
null 2:false
not null 1:false
not null 2:true
  • checkIndex方法

检查index是否在[0,length),如果是,返回index,否则抛出IndexOutOfBoundsException。

   /* since 9 */ 
   public static int checkIndex(int index, int length) {
        return Preconditions.checkIndex(index, length, null);
    }

例子:

    private static void testCheckIndex() {
        System.out.println("index in:" + Objects.checkIndex(5, 100));
        try{
            System.out.println("index in:" + Objects.checkIndex(100, 100));
        }catch (IndexOutOfBoundsException e){
            System.out.println("exception:" + e.getMessage());
        }
    }

输出结果:

index in:5
exception:Index 100 out of bounds for length 100
  • checkFromToIndex方法

检查[fromIndex,toIndex) 是否在[0, length)范围内,如果是,返回fromIndex,否则抛出IndexOutOfBoundsException异常。

   /* Since 9 */ 
   public static int checkFromToIndex(int fromIndex, int toIndex, int length) {
        return Preconditions.checkFromToIndex(fromIndex, toIndex, length, null);
    }

例子:

    private static void testCheckFromToIndex() {
        System.out.println("index in:" + Objects.checkFromToIndex(5, 10, 100));
        try{
            System.out.println("index out:" + Objects.checkFromToIndex(5,101, 100));
        }catch (IndexOutOfBoundsException e){
            System.out.println("exception:" + e.getMessage());
        }
    }

输出结果:

index in:5
exception:Range [5, 101) out of bounds for length 100
  • checkFromIndexSize方法

检查[fromIndex,fromIndex+size) 是否在[0, length)范围内,如果是,返回fromIndex,否则抛出IndexOutOfBoundsException异常。

   /* Since 9 */
   public static int c(int fromIndex, int size, int length) {
        return Preconditions.checkFromIndexSize(fromIndex, size, length, null);
    }

例子:

    private static void testCheckFromIndexSize() {
        System.out.println("index in:" + Objects.checkFromIndexSize(5, 10, 100));
        try{
            System.out.println("index out:" + Objects.checkFromIndexSize(5,101, 100));
        }catch (IndexOutOfBoundsException e){
            System.out.println("exception:" + e.getMessage());
        }
    }

输出结果:

index in:5
exception:Range [5, 5 + 101) out of bounds for length 100


Tags:Objects   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Objects类是java.util包下的一个工具类,它只拥有私有的构造函数,因此无法对其进行实例化,但它提供了一系列针对object对象的静态方法,包括equal,hash, 参数检查等。Objects类的...【详细内容】
2020-07-24  Tags: Objects  点击:(53)  评论:(0)  加入收藏
▌简易百科推荐
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(12)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(10)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(10)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(14)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(17)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
一、概述观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察...【详细内容】
2021-12-13  唯一浩哥    Tags:Java   点击:(16)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条