流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:69,670 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Java之JDK7新增Objects类方法介绍(同时包含JDK8新添加的方法)

Java l, xy 535℃ 0评论

JDK7新增Objects类方法介绍(同时包含JDK8新添加的方法)

前言:

  1. JDK7里面新增的Objects类,该类的主要用途是将操作对象的一切常用操作进行的封装。包括hashCodeequals等。
  2. 本文是以java8版本介绍Objects类,所以也会介绍一下java8新增的方法。下面进入正题:

知识点一:Objects类简介:

  1. /**
  2. * This class consists of {@code static} utility methods for operating
  3. * on objects. These utilities include {@code null}-safe or {@code
  4. * null}-tolerant methods for computing the hash code of an object,
  5. * returning a string for an object, and comparing two objects.
  6. *
  7. * @since 1.7
  8. */
  9. 大概翻译:
  10. 本类由一些操作对象的静态工具方法构成,这些工具方法包括了非空检查、方法的非空参数检查、
  11. 比较对象的hashCode、为对象返回一个字符串表示、比较两个对象
  12. j.7开始添加该类

知识点二:Objects特点

  1. 1.该类是使用final修饰,不能被继承
  2. 2.该类的构造方法被私有化(使用private修饰),不能直接创建对象
  3. 3.该类中所有的方法都是静态方法,可以使用类型直接调用(对应2,该类不需要创建对象)

源码截图:

这里写图片描述

知识点三:Objects内方法介绍

  1. //比较两个对象是否相等(首先比较内存地址,然后比较a.equals(b),只要符合其中之一返回true)
  2. public static boolean equals(Object a, Object b);
  3. //深度比较两个对象是否相等(首先比较内存地址,相同返回true;如果传入的是数组,则比较数组内的对应下标值是否相同)
  4. public static boolean deepEquals(Object a, Object b);
  5. //返回对象的hashCode,若传入的为null,返回0
  6. public static int hashCode(Object o);
  7. //返回传入可变参数的所有值的hashCode的总和(这里说总和有点牵强,具体参考Arrays.hashCode()方法)
  8. public static int hash(Object... values);
  9. //返回对象的String表示,若传入null,返回null字符串
  10. public static String toString(Object o)
  11. //返回对象的String表示,若传入null,返回默认值nullDefault
  12. public static String toString(Object o, String nullDefault)
  13. //使用指定的比较器c 比较参数a和参数b的大小(相等返回0,a大于b返回整数,a小于b返回负数)
  14. public static <T> int compare(T a, T b, Comparator<? super T> c)
  15. //如果传入的obj为null抛出NullPointerException,否者返回obj
  16. public static <T> T requireNonNull(T obj)
  17. //如果传入的obj为null抛出NullPointerException并可以指定错误信息message,否者返回obj
  18. public static <T> T requireNonNull(T obj, String message)
  19. -----------------------------以下是jdk8新增方法---------------------------
  20. //判断传入的obj是否为null,是返回true,否者返回false
  21. public static boolean isNull(Object obj)
  22. //判断传入的obj是否不为null,不为空返回true,为空返回false (和isNull()方法相反)
  23. public static boolean nonNull(Object obj)
  24. //如果传入的obj为null抛出NullPointerException并且使用参数messageSupplier指定错误信息,否者返回obj
  25. public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)

知识点四:案例

下面简单测试了几个方法:

  1. package cn.cupcat.java8;
  2. import org.junit.Test;
  3. import java.util.Comparator;
  4. import java.util.Objects;
  5. /**
  6. * Created by xy on 2017/12/25.
  7. */
  8. public class ObjectsTest {
  9. /**
  10. * 因为Objects类比较简单,所以只用这一个测试用例进行测试
  11. * */
  12. @Test
  13. public void equalsTest(){
  14. String str1 = "hello";
  15. String str2 = "hello";
  16. //传入对象
  17. //Objects.equals(str1, str2) ? true
  18. boolean equals = Objects.equals(str1, str2);
  19. System.out.println("Objects.equals(str1, str2) ? "+ equals);
  20. }
  21. @Test
  22. public void deepEqualsTest(){
  23. String str1 = "hello";
  24. String str2 = "hello";
  25. //传入对象
  26. boolean deepEquals = Objects.deepEquals(str1, str2);
  27. //Objects.deepEquals(str1, str2) ? true
  28. System.out.println("Objects.deepEquals(str1, str2) ? "+ deepEquals);
  29. int[] arr1 = {1,2};
  30. int[] arr2 = {1,2};
  31. //传入数组
  32. deepEquals = Objects.deepEquals(arr1, arr2);
  33. //Objects.deepEquals(arr1, arr2) ? true
  34. System.out.println("Objects.deepEquals(arr1, arr2) ? "+ deepEquals);
  35. }
  36. @Test
  37. public void hashCodeTest(){
  38. String str1 = "hello";
  39. //传入对象
  40. int hashCode = Objects.hashCode(str1);
  41. //Objects.hashCode(str1) ? 99162322
  42. System.out.println("Objects.hashCode(str1) ? "+ hashCode);
  43. //传入null
  44. hashCode = Objects.hashCode(null);
  45. //Objects.hashCode(null) ? 0
  46. System.out.println("Objects.hashCode(null) ? "+ hashCode);
  47. }
  48. @Test
  49. public void hashTest(){
  50. int a = 100;
  51. //传入对象
  52. int hashCode = Objects.hashCode(a);
  53. //Objects.hashCode(str1) ? 100
  54. System.out.println("Objects.hashCode(str1) ? "+ hashCode);
  55. //输入数组
  56. int[] arr = {100,100};
  57. hashCode = Objects.hash(arr);
  58. //Objects.hashCode(arr) ? 1555093793
  59. System.out.println("Objects.hashCode(arr) ? "+ hashCode);
  60. }
  61. @Test
  62. public void compareTest(){
  63. int a = 10;
  64. int b = 11;
  65. int compare = Objects.compare(a, b, new Comparator<Integer>() {
  66. @Override
  67. public int compare(Integer o1, Integer o2) {
  68. return o1.compareTo(o2);
  69. }
  70. });
  71. // compare = -1
  72. System.out.println(" compare = "+ compare);
  73. }
  74. @Test
  75. public void requireNonNullTest(){
  76. String test = null;
  77. //java.lang.NullPointerException
  78. // String s = Objects.requireNonNull(test);
  79. //java.lang.NullPointerException: 这是空指针异常提示的信息
  80. //String s = Objects.requireNonNull(test, "这是空指针异常提示的信息");
  81. //java.lang.NullPointerException: 我是返回的异常信息
  82. String s = Objects.requireNonNull(test,()->"我是返回的异常信息");
  83. }
  84. }

知识点五:总结

  1. Objects类给我们提供了一些常用的操作对象的方法,我们可以直接使用,这是非常方便的。尤其是requireNonNull()方法,
  2. 在我们写方法时需要判断传入的参数是否为null可以使用该方法及其方便。

转载请注明:流年似水 » Java之JDK7新增Objects类方法介绍(同时包含JDK8新添加的方法)

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址