文章目录

  • 一、Objects类是什么?
  • 二、方法的使用(从1.7版本开始);
    • 1.checkFromIndexSize​(int fromIndex, int size, int length)
    • 2.checkFromToIndex​(int fromIndex, int toIndex, int length)
    • 3.checkIndex​(int index, int length)
    • 4.~~compare​(T a, T b, Comparator<? super T> c)~~
    • 5.deepEquals​(Object a, Object b)
    • 6.equals​(Object a, Object b)
    • 7.~~hash​(Object... values)~~
    • 8.~~hashCode​(Object o)~~
    • 9.isNull​(Object obj)
    • 10.nonNull​(Object obj)
    • 11.requireNonNull​(T obj)
    • 12.requireNonNull​(T obj, String message)
    • 13.~~requireNonNull​(T obj, Supplier messageSupplier)~~
    • 14.requireNonNullElse​(T obj, T defaultObj)
    • 15.~~requireNonNullElseGet​(T obj, Supplier<? extends T> supplier)~~
    • 16.toString​(Object o)
    • 17.toString​(Object o, String nullDefault)
  • 总结

一、Objects类是什么?

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

二、方法的使用(从1.7版本开始);

1.checkFromIndexSize​(int fromIndex, int size, int length)

该方法从9版本开始。

(1)变量和类型:static int;
(2)参数说明:

  • fromIndex - 子间隔的下限(包括)
  • size - 子范围的大小
  • length - 范围的上限(不包括)

(3)方法的作用:检查fromIndex(包括)和size(不包括)相加是否大于length;但是如果下面任一条件为真,则子范围被定义为超出界限抛出异常(IndexOutOfBoundsException):

  • fromIndex < 0
  • size < 0
  • fromIndex + size > length
  • length < 0

如果在条件范围内则会返回fromIndex的值(注意,fromIndex+size=length也返回fromIndex的值,因为该方法判断时不包括上限length的值)
(4)原方法代码中的判断代码:

    if ((length | fromIndex | size) < 0 || size > length - fromIndex)throw outOfBoundsCheckFromIndexSize(oobef, fromIndex, size, length);return fromIndex;

(5)实例测试:

import java.util.Objects;
public class checkFromIndexSize_test {public static void main(String[] args) {System.out.println(Objects.checkFromIndexSize(2,4,7));//2+4<7,返回2System.out.println(Objects.checkFromIndexSize(3,3,6));//3+3=6,返回3System.out.println(Objects.checkFromIndexSize(4,4,7));//4+4>7,抛出异常}
}

2.checkFromToIndex​(int fromIndex, int toIndex, int length)

该方法从9版本开始。

(1)变量和类型:static int;
(2)参数说明:

  • fromIndex - 子范围的下限(包括)
  • toIndex - 子范围的上限(不包括)
  • length - 上限(不包括)范围
    (3)方法的作用:检查否在子范围从fromIndex(包括)到toIndex (不包括)是范围界限内0(包括)到length (不包括)。
    如果下面任一条件为真,则子范围被定义为超出界限抛出异常(IndexOutOfBoundsException):
  • fromIndex < 0
  • fromIndex > toIndex
  • toIndex > length
  • length < 0

如果在条件范围内则会返回fromIndex的值(注意:fromIndex可以为0,并且fromIndex可以等于toIndex;toIndex可以等于length)。
(4)原方法中的判断代码:

if (fromIndex < 0 || fromIndex > toIndex || toIndex > length)throw outOfBoundsCheckFromToIndex(oobef, fromIndex, toIndex, length);return fromIndex;

(5)实例测试:

import java.util.Objects;
public class checkFromToIndex_test {public static void main(String[] args) {System.out.println(Objects.checkFromToIndex(0,1,2));//0<1<2,返回0System.out.println(Objects.checkFromToIndex(1,1,1));//1=1=1,返回1System.out.println(Objects.checkFromToIndex(2,5,3));//5>3,抛出异常}
}

3.checkIndex​(int index, int length)

该方法从9版本开始。

(1)变量和类型:static int;
(2)参数说明:

  • index - 该指数
  • length - 范围的上限(不包括)
    (3)方法的作用:检查index是否在0 (含)到length (不包括)范围内。
    如果下面任一条件为真,则定义index超出范围抛出异常(outOfBoundsCheckIndex):
  • index < 0
  • index >= length
  • length < 0

如果在条件范围则会返回index的值。
(4)原方法中的判断代码:

if (index < 0 || index >= length)throw outOfBoundsCheckIndex(oobef, index, length);return index;

(5)实例测试:

import java.util.Objects;
public class checkIndex_test {public static void main(String[] args) {System.out.println(Objects.checkIndex(0,2));//0<2,返回0System.out.println(Objects.checkIndex(1,1));//1=1,抛出异常}
}

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

该方法暂未整理。

5.deepEquals​(Object a, Object b)

(1)变量和类型:static boolean;
(2)参数说明:

  • a - 一个物体
  • b - 与 a进行比较的对象,用于深度相等

(3)方法的作用:如果参数a和b深层相等则返回true,两个值都为null也为true,如果是数组则会调用Arrays.deepEquals中的算法来确定相等(数组的长度和其中元素相等会返回true,这也是区别于普通equals方法,equals会比较内存地址,地址不同就返回false,不会比较数组中的元素和长度),否则直接通过参数a的equals来判断;
(4)原方法中的判断代码:

if (a == b)return true;else if (a == null || b == null)return false;elsereturn Arrays.deepEquals0(a, b);
  • Arrays.deepEquals0(a,b)方法的判断代码:
static boolean deepEquals0(Object e1, Object e2) {assert e1 != null;boolean eq;if (e1 instanceof Object[] && e2 instanceof Object[])eq = deepEquals ((Object[]) e1, (Object[]) e2);else if (e1 instanceof byte[] && e2 instanceof byte[])eq = equals((byte[]) e1, (byte[]) e2);else if (e1 instanceof short[] && e2 instanceof short[])eq = equals((short[]) e1, (short[]) e2);else if (e1 instanceof int[] && e2 instanceof int[])eq = equals((int[]) e1, (int[]) e2);else if (e1 instanceof long[] && e2 instanceof long[])eq = equals((long[]) e1, (long[]) e2);else if (e1 instanceof char[] && e2 instanceof char[])eq = equals((char[]) e1, (char[]) e2);else if (e1 instanceof float[] && e2 instanceof float[])eq = equals((float[]) e1, (float[]) e2);else if (e1 instanceof double[] && e2 instanceof double[])eq = equals((double[]) e1, (double[]) e2);else if (e1 instanceof boolean[] && e2 instanceof boolean[])eq = equals((boolean[]) e1, (boolean[]) e2);elseeq = e1.equals(e2);return eq;}

(5)实例测试:

import java.util.Objects;
public class deepEquals_test {public static void main(String[] args) {int[][] a ={{0,1,2},{2,3,4},{5,6,7}};int[][] b ={{0,1,2},{2,3,4},{5,6,7}};System.out.println(Objects.deepEquals(a,b));//返回trueSystem.out.println(Objects.equals(a,b));//返回falseSystem.out.println(Objects.equals(5,5));//返回trueSystem.out.println(Objects.deepEquals(8,8));//返回true}
}

6.equals​(Object a, Object b)

(1)变量和类型:boolean
(2)参数说明:

  • a - 一个对象
  • b - 要与 a进行比较以获得相等性的对象

(3)方法的作用:
如果参数相等返回true,有一个是null另一个不为null返回false,如果都是null返回true;如果不是这些情况,则通过参数a调用Object类中equals方法来确定其和b的相等性。
(4)原方法中的判断代码:

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

Object.equals(Object obj)方法的判断代码:

    public boolean equals(Object obj) {return (this == obj);}

所以equals方法比较的如果不是基本数据类型或者String类型的参数a和b,比较的是两者的地址,地址相同则为true;并且如果只有一个参数为null不会出现空指针异常,而是返回false。

(5)实例测试:

import java.util.Objects;
public class equals_test {public static void main(String[] args) {class Person{}Person p = new Person();Person m = p;Person n = new Person();System.out.println(Objects.equals(p,m));//trueSystem.out.println(Objects.equals(p,n));//falseSystem.out.println(Objects.equals(n,m));//falseSystem.out.println(Objects.equals("张三","张三"));//true}
}

7.hash​(Object… values)

方法暂未整理

8.hashCode​(Object o)

方法暂未整理

9.isNull​(Object obj)

该方法从1.8版本开始

(1)变量和类型:static boolean
(2)参数说明:检查参数obj是否为null
(3)方法的作用:如果参数为null返回true,不为null返回false
(4)原方法中的判断代码:

   public static boolean isNull(Object obj) {return obj == null;}

(5)实例测试:

import java.util.Objects;
public class isNull_test {public static void main(String[] args) {class Person{String name;};Person p = new Person();System.out.println(Objects.isNull(null));//trueSystem.out.println(Objects.isNull(p));//falseSystem.out.println(Objects.isNull(p.name));//true}
}

10.nonNull​(Object obj)

该方法从1.8版本开始。

(1)变量和类型:static boolean
(2)参数说明:检查参数obj是否为null
(3)方法的作用:如果参数为null返回false,不为null返回true(注意:作用刚好与isnull相反)
(4)原方法中的判断代码:

    public static boolean nonNull(Object obj) {return obj != null;}

(5)实例测试:

import java.util.Objects;
public class nonNull_test {public static void main(String[] args) {System.out.println(Objects.nonNull(18));//trueSystem.out.println(Objects.nonNull(null));//false}
}

11.requireNonNull​(T obj)

(1)变量和类型:static T
(2)参数说明:

  • obj-检查引用的对象obj是否为null
  • T-引用的类型

(3)方法的作用:引用对象obj如果为空的话抛出异常(NullPointerException ),不为空的话返回obj的值;
(4)原方法中的判断代码:

public static <T> T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj;}

(5)实例测试:

import java.util.Objects;
public class requireNonNull_test {public static void main(String[] args) {class Person<T> {private T name;}Person p = new Person();System.out.println(Objects.requireNonNull(p));//返回p的地址System.out.println(Objects.requireNonNull(p.name));//报错NullPointerException }
}

12.requireNonNull​(T obj, String message)

(1)变量和类型:static T
(2)参数说明:

  • obj-检查引用的对象obj是否为null
  • T - 引用的类型
  • message - 在抛出 NullPointerException的情况下使用的详细消息

(3)方法的作用:引用对象obj如果为空的话抛出异常(NullPointerException ),并且显示String message的信息;不为空的话返回obj的值;
(4)原方法中的判断代码:

 public static <T> T requireNonNull(T obj, String message) {if (obj == null)throw new NullPointerException(message);return obj;}

(5)实例测试:

import java.util.Objects;
public class requireNonNull_test2 {public static void main(String[] args) {class Person<T> {private T name;}Person p = new Person();System.out.println(Objects.requireNonNull(p));//返回p的地址System.out.println(Objects.requireNonNull(p.name, "方法错误"));//报错并显示“方法错误”}
}

13.requireNonNull​(T obj, Supplier messageSupplier)

该方法未整理结束

该方法从1.8版本开始

(1)变量和类型:static T
(2)参数说明:

  • T - 引用的类型
  • obj - 检查对象
  • messageSupplier -

(3)方法的作用:
(4)原方法中的判断代码:

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

14.requireNonNullElse​(T obj, T defaultObj)

该方法从9版本开始。

(1)变量和类型:static T
(2)参数说明:

  • T - 引用的类型
  • obj - 一个对象
  • defaultObj - 另一个参数对象

(3)方法的作用:
第一步:判断obj是否为null,如果不为null返回obj的值结束;
第二步:如果obj为null再查看defaultObj是否为空,如果defaultObj此时不为null就返回defaultObj的值,如果obj和defaultObj都为null则抛出异常(NullPointerException);
(4)原方法中的判断代码:

    public static <T> T requireNonNullElse(T obj, T defaultObj) {return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");}

(5)实例测试

import java.util.Objects;
public class requireNonNullElse_test {public static void main(String[] args) {class Person{String name;}Person p = new Person();System.out.println(Objects.requireNonNullElse(p,8));//返回p的地址System.out.println(Objects.requireNonNullElse(p.name,8));//返回8System.out.println(Objects.requireNonNullElse(p.name,null));//抛出异常}
}

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

该方法未整理结束

该方法从第9版本开始。

(1)变量和类型:static T
(2)参数说明:
(3)方法的作用:
(4)原方法中的判断代码:

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

16.toString​(Object o)

(1)变量和类型:static String
(2)参数说明:

  • o-传入一个对象

(3)方法的作用:如果传入对象为null则返回null,如果不为null则调用String类中的toString方法(会返回对象o的哈希值);
(4)原方法中的判断代码:

    public static String toString(Object o) {return String.valueOf(o);}

String中的toString方法代码:

   public static String valueOf(Object obj) {return (obj == null) ? "null" : obj.toString();}

17.toString​(Object o, String nullDefault)

(1)变量和类型:static String
(2)参数说明:

  • o - 要判断的对象
  • nullDefault - 如果第一串字符串
    (3)方法的作用:判断o是否为null,如果不为null返回对象o的哈希值,如果为null则返回nullDefault的信息;
    (4)原方法中的判断代码:
    public static String toString(Object o, String nullDefault) {return (o != null) ? o.toString() : nullDefault;}

总结

总结:部分方法未整理完善。

Objects类中的方法的使用相关推荐

  1. python buildin 中的一些类中为什么方法的内容都是pass?

    python buildin 中的一些类中为什么方法的内容都是pass? 文章目录: 一.看到的一些方法的定义都是pass 二.如何查看Python的源代码 python 的源代码是用C语言写的 一. ...

  2. python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>

    python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法> 参考文章: (1)python---方法解析顺序MRO(Method ...

  3. Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转)

    Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转) 参考文章: (1)Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转) (2)https://www. ...

  4. python装饰器类-Python 装饰器装饰类中的方法

    title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...

  5. python装饰器实例-基于Python 装饰器装饰类中的方法实例

    title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...

  6. 后盾网lavarel视频项目---2、phpstorm显示类中的方法快捷键

    后盾网lavarel视频项目---2.phpstorm显示类中的方法快捷键 一.总结 一句话总结: ctrl + f12 1.npm安装js插件? npm install hdjs 2.phpstor ...

  7. Java中divide用法_java的BIgInteger类中divideAndRemainder方法怎么用?

    展开全部 Java的BigInteger类中e68a8462616964757a686964616f31333433633436divideAndRemainder方法的用法是,先建一个BigInte ...

  8. idea中查看类中所有方法列表(Alt+7)(亲测)

    idea中查看类中所有方法列表 当我们在开发中,或者在读别人代码时,如何能快速定位到想看的方法: 我们以activiti中的RepositoryService为例,如下图,RepositoryServ ...

  9. ViewController类中得方法和属性的用途

    ViewController类中得方法和属性的用途 1. wantsFullScreenLayout 只要在UIViewController上设置wantsFullScreenLayout=true ...

最新文章

  1. android 获取指定月份的开始时间 结束时间
  2. 一个空值_java匠人手法优雅的处理空值
  3. java object 引用类型_java中的四种引用类型
  4. 揭开腾讯IDC节能环保黑科技
  5. 详解MQ消息队列及四大主流MQ的优缺点
  6. MySQL之练习题5
  7. dubbo分布式服务子系统的划分
  8. VC无闪烁刷屏技术的实现【转】
  9. WPF学习拾遗(三)TextBox焦点问题
  10. 捕鱼达人 FishMaster 记录(Done)
  11. python set集合排序_Python Set集合
  12. DIOCP之DEMO-登陆验证设计(二)
  13. unity 安卓端输出日志神器--Reporter插件
  14. 用Python告诉你深圳房租有多高?
  15. Kaggle实战之 房价预测案例
  16. Echarts制作横向坐标轴,并且文字名称和数值都在横向坐标轴的上面
  17. ClickHouse settings final
  18. google,百度,yahoo搜索比较
  19. Python爬虫-某跨境电商(AM)搜索热词
  20. 浅显易懂认识23种设计模式

热门文章

  1. 洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)
  2. Android清空画布
  3. eclpise插件安装问题
  4. 分布式知识点总结(来自CS-Notes)
  5. 项目管理 :关于团队的5个小故事
  6. c语言输出王字图形,C语言编程宝典(王大刚) 3 关键字和标识符
  7. 如何把模糊的照片还原?
  8. linux 下 网卡命名改名
  9. 织梦CMS安装的时候出现安全警告:Safe Alert: Request Error step 2 解决办法。
  10. android下雨动画效果,Android 自定义View之下雨动画