• java.util.Objects 简介


    java.util.Objects 类
    包含了几个静态方法,可以实现对对象的比较、生成hash code之类的功能,
    很多方法里考虑了对象是null的情况,在输入的参数是null时有特定的处理方式。

    以下是该类中包含的方法:


    public static <T> int compare(T a, T b, Comparator<? super T> c)
    比较对象a和对象b,如果a和b是相等的,返回0,如果不相等,调用c的compare方法。
    注意:如果a或者b是null的情况下,调用c的compare方法时有可能报空指针异常,看c的compare方法怎么写了。


    public static boolean equals(Object a, Object b)
    比较对象a和对象b,使用的是第一个参数的equals()方法,
    如果两个参数中有一个是null,则返回false,
    如果两个参数都是null,则返回true。


    public static boolean deepEquals(Object a, Object b)
    比较对象a和对象b是否深度相等,使用的其实是Arrays.deepEquals()方法
    只有a和b对应位置的元素都相等时,才返回true,a好b都是null也返回true,否则返回false。


    public static int hash(Object... values)
    得到一列对象的hash code,
    使用的其实是Arrays.hashCode(Object[]),Object[]数组元素就是hash方法传入的参数值


    public static int hashCode(Object o)
    得到一个对象的hash code,如果参数为null,返回0


    public static <T> T requireNonNull(T obj)
    判断一个对象是不是null,如果不是null则返回对象本身,如果是null则抛出空指针异常。


    public static <T> T requireNonNull(T obj,String message)
    判断一个对象是不是null,如果不是null则返回对象本身,如果是null则抛出空指针异常,并把第二个参数message写在异常信息中


    public static String toString(Object o)
    调用对象的toString()方法,如果参数是null,返回字符串"null"


    public static String toString(Object o, String nullDefault)
    调用对象的toString()方法,如果参数是null,返回第二个参数表示的字符串


    相关的测试代码如下:

    package test;
     
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Objects;
     
    public class Test {
     
    	/**
    	 * 自定义的Comparator实现类
    	 *
    	 */
    	public static class Comp implements Comparator<Test>{
    		/**
    		 * 如果t1的age大,返回1,否则返回2
    		 */
    		@Override
    		public int compare(Test t1, Test t2) {
    			if(t1.age>t2.age){
    				return 1;
    			}else {
    				return 2;
    			}
    		}
    	}
    	
    	public int age;
    	
    	public static void main(String[] args) {
    		testCompare();
    		testEquals();
    		testDeepEquals();
    		testHash();
    		testHashCode();
    		testRequireNonNull();
    		testRequireNonNullMessage();
    		testToString();
    		testToStringDefault();
    	}
    	
    	public static void testCompare(){
    		Comp c=new Comp();
    		Test a=new Test();
    		a.age=123;
    		Test b=new Test();
    		b.age=123;
    		
    		int result=Objects.compare(a, a, c);
    		System.out.println(result);//a和a完全是同一个对象,直接返回0
    		
    		int result2=Objects.compare(a, b, c);
    		System.out.println(result2);//a和b不是一个对象,所以调用c的compare方法,返回1
    	}
    	
    	public static void testEquals(){
    		Test a=new Test();
    		a.age=123;
    		Test b=new Test();
    		b.age=123;
    		
    		boolean result=Objects.equals(a, b);
    		System.out.println(result);//返回false
    		
    		boolean result2=Objects.equals(null, b);
    		System.out.println(result2);//返回false
    		
    		boolean result3=Objects.equals(null, null);
    		System.out.println(result3);//返回true
    	}
    	
    	public static void testDeepEquals(){
    		String[] a=new String[]{"123","456","789"};
    		String[] b=new String[]{"123","456","789"};
    		
    		boolean result=a.equals(b);
    		System.out.println(result);//返回false
    		
    		boolean result2=Objects.deepEquals(a, b);
    		System.out.println(result2);//返回true
    		
    		boolean result3=Objects.deepEquals(null, b);
    		System.out.println(result3);//返回false
    		
    		boolean result4=Objects.deepEquals(null, null);
    		System.out.println(result4);//返回true
    	}
    	
    	public static void testHash(){
    		String a="123";
    		String b="23";
    		String c="3";
    		
    		System.out.println(a.hashCode());//48690
    		System.out.println(b.hashCode());//1601
    		System.out.println(c.hashCode());//51
    		System.out.println(Objects.hash(a));//48721,不等于a.hashCode()
    		
    		String[] arr=new String[]{"123","23","3"};
    		System.out.println(Arrays.hashCode(arr));//46870563
    		
    		System.out.println(Objects.hash(a,b,c));//46870563,等于Arrays.hashCode(arr)
    	}
    	
    	public static void testHashCode(){
    		System.out.println(Objects.hashCode("123"));//48690
    		System.out.println("123".hashCode());//48690
    		System.out.println(Objects.hashCode(null));//0
    	}
    	
    	public static void testRequireNonNull(){
    		Test t1=new Test();
    		t1.age=123;
    		
    		Test t2=Objects.requireNonNull(t1);
    		System.out.println(t2.age);//t1不是null,于是赋值给了t2,age和t1一样是123
    		
    		Test t3=Objects.requireNonNull(null);
    		System.out.println(t3.age);//t3是null,抛出空指针异常
    	}
    	
    	public static void testRequireNonNullMessage(){
    		Test t1=new Test();
    		t1.age=123;
    		
    		Test t2=Objects.requireNonNull(t1,"参数不能是null");
    		System.out.println(t2.age);//t1不是null,于是赋值给了t2,age和t1一样是123
    		
    		Test t3=Objects.requireNonNull(null,"参数不能是null");
    		System.out.println(t3.age);//t3是null,抛出空指针异常
    		/*
    		 * 异常的内容是这样的:
    		 * Exception in thread "main" java.lang.NullPointerException: 参数不能是null
    				at java.util.Objects.requireNonNull(Unknown Source)
    				at test.Test.testRequireNonNullMessage(Test.java:126)
    				at test.Test.main(Test.java:36)
    		 */
    	}
    	
    	public static void testToString(){
    		String a="123";
    		System.out.println(Objects.toString(a));//返回123
    		System.out.println(Objects.toString(null));//返回字符串"null"
    	}
    	
    	public static void testToStringDefault(){
    		String a="123";
    		System.out.println(Objects.toString(a,"default string"));//返回123
    		System.out.println(Objects.toString(null,"default string"));//返回字符串"default string"
    	}
    }
    

      

  • 相关阅读:
    计算机硕士工资一览表 08年最新各大IT公司薪水行
    VS2010单元测试
    windows操作系统的快捷键
    关于
    [美国代购] Nexus 6 与 Moto X 询价聊天记录整理
    nginxのerror_logはformat指定できない.
    Give $20/month and provide 480 hours of free education
    如何才可能将一件事情做到最高的效率
    Palindrome Number
    Reverse Integer
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/14985429.html
Copyright © 2020-2023  润新知