Objects类中的方法的使用
文章目录
- 一、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类中的方法的使用相关推荐
- python buildin 中的一些类中为什么方法的内容都是pass?
python buildin 中的一些类中为什么方法的内容都是pass? 文章目录: 一.看到的一些方法的定义都是pass 二.如何查看Python的源代码 python 的源代码是用C语言写的 一. ...
- python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>
python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法> 参考文章: (1)python---方法解析顺序MRO(Method ...
- Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转)
Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转) 参考文章: (1)Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转) (2)https://www. ...
- python装饰器类-Python 装饰器装饰类中的方法
title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...
- python装饰器实例-基于Python 装饰器装饰类中的方法实例
title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...
- 后盾网lavarel视频项目---2、phpstorm显示类中的方法快捷键
后盾网lavarel视频项目---2.phpstorm显示类中的方法快捷键 一.总结 一句话总结: ctrl + f12 1.npm安装js插件? npm install hdjs 2.phpstor ...
- Java中divide用法_java的BIgInteger类中divideAndRemainder方法怎么用?
展开全部 Java的BigInteger类中e68a8462616964757a686964616f31333433633436divideAndRemainder方法的用法是,先建一个BigInte ...
- idea中查看类中所有方法列表(Alt+7)(亲测)
idea中查看类中所有方法列表 当我们在开发中,或者在读别人代码时,如何能快速定位到想看的方法: 我们以activiti中的RepositoryService为例,如下图,RepositoryServ ...
- ViewController类中得方法和属性的用途
ViewController类中得方法和属性的用途 1. wantsFullScreenLayout 只要在UIViewController上设置wantsFullScreenLayout=true ...
最新文章
- android 获取指定月份的开始时间 结束时间
- 一个空值_java匠人手法优雅的处理空值
- java object 引用类型_java中的四种引用类型
- 揭开腾讯IDC节能环保黑科技
- 详解MQ消息队列及四大主流MQ的优缺点
- MySQL之练习题5
- dubbo分布式服务子系统的划分
- VC无闪烁刷屏技术的实现【转】
- WPF学习拾遗(三)TextBox焦点问题
- 捕鱼达人 FishMaster 记录(Done)
- python set集合排序_Python Set集合
- DIOCP之DEMO-登陆验证设计(二)
- unity 安卓端输出日志神器--Reporter插件
- 用Python告诉你深圳房租有多高?
- Kaggle实战之 房价预测案例
- Echarts制作横向坐标轴,并且文字名称和数值都在横向坐标轴的上面
- ClickHouse settings final
- google,百度,yahoo搜索比较
- Python爬虫-某跨境电商(AM)搜索热词
- 浅显易懂认识23种设计模式