W
e
l
c
o
m
e
: )

常用类库_Objects使用

常用类库

 

 

Objects的使用

如果直接使用equals对两个对象s1和s2进行比较就会出现bug,比如s1是空值就会报错,控制台显示空指针异常

为什么会出现这种问题呢?是这样的你对象是空的,而你拿空的东西调用方法,它是没有方法的,它是空的。

Java代码:

package demo1;

/**

 * Objects的使用

 */

public class Demo1_1{

     public static void main(String[] args) {

        String s1 = null; //对象的引用

        String s2 = "121";

        String s3 = "1111";

        //s1与s2进行比较,由于s1是空值就会报错出现空指针问题

        System.out.println(s1.equals(s2));

        // System.out.println(s2.equals(s3));

    }

}

 

如图:

 

 

如何解决呢?对其做判断就可以解决了

 

就是使用系统提供的Objects就不会出现在比较时出现空指针异常问题了。

 

package demo1;



import java.io.ObjectStreamClass;

import java.util.Objects;



public class Demo1_2 {

    public static void main(String[] args) {

        Person p1 = null;

        Person p2 = new Person();

        //如果使用这种方法进行判断,在p1为空值时就会报错

        //System.out.println(p1.equals(p2));

        //如果使用系统提供的Objects就不会出现异常

        System.out.println(Objects.equals(p1,p2));

    }

}

如图就不会出现异常,提示的是false

 

 

那Objects当中是如何做到的呢?

就对其进行判断,如下代码:

 
public static boolean equals(Object a, Object b) {

    return (a == b) || (a != null && a.equals(b));

}

 

它是对其判断

第一个对象a不能是空,如果是空的就会return返回。

 

checkFromIndexSize(int fromIndex, int size, int length)这方法是用来判断下标用的,不过这种方法使用没必要使用的,自己写一个判断的方法就可以使用没必要这么麻烦的。

 

isNull(Object obj) 专门用来判断一个对象是不是空的。

部分java代码:

public static void main(String[] args) {

    Person p1 = null;

    //用来判断对象p1是不是空的

    System.out.println(Objects.isNull(p1));

}

 

如图,判断为true,是真的,即p1为空的

 

 

再来看看更高级的

部分代码:

public static void main(String[] args) {

    Person p1 = null;

    //用来判断对象p1是不是空的

    //System.out.println(Objects.isNull(p1));

    //这个比上面的判断更高级

    System.out.println(Objects.requireNonNull(p1));

}

 

如图,是直接返回异常

 

 

如何它是如何做到的呢?

是系统Objects中的方法对其判断的

如下代码:

public static boolean isNull(Object obj) {

    return obj == null;

}

就是这么小小一行代码,就是判断对象是不是为空的。

还有对不是空的进行判断

public static boolean nonNull(Object obj) {

    return obj != null;

}

还有一个判断更高级

如下代码:

public static <T> T requireNonNull(T obj) 
{

    if (obj == null) //如果是空的,则直接走异常

        throw new NullPointerException();

    return obj;//否则直接返回

}

 

这些是常用的操作,只不过是整理到Objects工具中,来提供我们方便使用。

 

下面还有我对系统中Objects工具使用的一些整理

 


public final class Objects
extends Object

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

    • API Note:

静态方法如checkIndex(int, int) checkFromToIndex(int, int, int) ,和checkFromIndexSize(int, int, int)提供用于如果对应于索引和子范围的值超出边界的检查的便利性。 这些静态方法的变体支持定义运行时异常以及相应的异常详细消息,这些消息在值超出范围时抛出。 此类方法接受功能接口参数,即BiFunction实例,它将超出范围的值映射到运行时异常。 将这些方法与作为lambda表达式,方法引用或捕获值的类的参数结合使用时应小心。 在这种情况下,与功能接口分配相关的捕获成本可能超过检查边界的成本。

    • 从以下版本开始:

1.7

    •  

变量和类型

方法

描述

static int

checkFromIndexSize(int fromIndex, int size, int length)

检查是否在子范围从 fromIndex (包括)到 fromIndex + size (不包括)是范围界限内 0 (包括)到 length (不包括)。

static int

checkFromToIndex(int fromIndex, int toIndex, int length)

检查是否在子范围从 fromIndex (包括)到 toIndex (不包括)是范围界限内 0 (包括)到 length (不包括)。

static int

checkIndex(int index, int length)

检查 index是否在 0 (含)到 length (不包括)范围内。

static <T> int

compare(T a, T b, Comparator<? super T> c)

如果参数相同则返回0,否则返回 c.compare(a, b)

static boolean

deepEquals(Object a, Object b)

返回 true如果参数是深层相等,彼此 false其他。

static boolean

equals(Object a, Object b)

返回 true如果参数相等,彼此 false其他。

static int

hash(Object... values)

为一系列输入值生成哈希码。

static int

hashCode(Object o)

返回非的哈希码 null参数,0为 null的论点。

static boolean

isNull(Object obj)

返回 true如果提供的参考是 null ,否则返回 false

static boolean

nonNull(Object obj)

返回 true如果提供的参考是非 null否则返回 false

static <T> T

requireNonNull(T obj)

检查指定的对象引用是否不是 null

static <T> T

requireNonNull(T obj, String message)

检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException

static <T> T

requireNonNull(T obj, Supplier<String> messageSupplier)

检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException

static <T> T

requireNonNullElse(T obj, T defaultObj)

如果它是非 null ,则返回第一个参数,否则返回非 null第二个参数。

static <T> T

requireNonNullElseGet(T obj, Supplier<? extends T> supplier)

如果它是非 null ,则返回第一个参数,否则返回非 nullsupplier.get()

static String

toString(Object o)

返回调用的结果 toString对于非 null参数, "null"null的说法。

static String

toString(Object o, String nullDefault)

如果第一个参数不是 null ,则返回在第一个参数上调用 toString的结果,否则返回第二个参数。

      • 声明方法的类 java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

 

 

posted @ 2021-03-13 23:25  所遇所思  阅读(4)  评论(0编辑  收藏  举报  来源