一、Objects 与 Object 区别
Object 是 Java 中所有类的基类,位于java.lang包。
Objects 是 Object 的工具类,位于java.util包。它从jdk1.7开始才出现,被final修饰不能被继承,拥有私有的构造函数。
它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
二、class Objects的方法们
2.1 checkFromToIndex(int fromIndex,int toIndex,int length
描述:检查是否在子范围fromIndex(包括)到toIndex(不包括)是范围界限内0到length(不包括)。
代码如下:
public class Test01 {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] += 1;
}
//此方法的意思为从7到8之前的范围是否在数组arr的范围内
int x = Objects.checkFromToIndex(7,8,arr.length);
System.out.println(x);
}
}
复制代码
结果为:7
2.2 checkFromIndexSize(int fromIndex,int size,int length)
描述:检查子范围从fromIndex(包括)到fromIndex+size(不包括)是范围界限内0(包括)到length(不包括),返回值为fromIndex.。
代码如下
public class Test01 {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] += 1;
}
//此方法的意思为从7到9之前的范围是否在数组arr的范围内
int x = Objects.checkFromIndexSize(7,2,arr.length);
System.out.println(x);
}
}
复制代码
结果为:7
2.3 checkIndex(int index,int length)
描述:检查index是否在0(含)到length(不包括)范围内。
代码如下:
public class Test01 {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] += 1;
}
//此方法的意思为下标7是否在数组arr的范围内
int x = Objects.checkIndex(7,arr.length);
System.out.println(x);
}
}
复制代码
结果为:7
2.4 eqials(Object a,Object b)
描述:如果参数相等返回true,不等为false
代码如下:
public class Test01 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "123";
System.out.println(s1.equals(s2));
String[] a1 = {"a","b","c"};
String[] a2 = {"a","b","c"};
System.out.println(s1.equals(s2));
String s3 = null;
String s4 = null;
boolean res = Objects.equals(s3,s4);
System.out.println(res);
System.out.println(s1.equals(s2));
}
}
复制代码
结果为:false false true false
Objects中的equals首先判断传进来的参数是否相等,其次判断第一个参数是否为Null。
由于数组是属于引用类型的变量,在进行比较时比较的是它的内存地址,s1和s2虽然值一样,但是内存地址不一样,所以为false.
2.5 deepEquals(Object a,Object b)
描述:如果是深层次相等返回true,如果不是返回false
代码如下:
public class Test01 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "123";
String s3 = "abc";
boolean res1 = Objects.equals(s1,s3);
System.out.println(res1);
boolean res2 = Objects.deepEquals(s1,s3);
System.out.println(res2);
}
}
复制代码
结果为:false true
二者的区别在于deepEquals比较的是传入参数的值完全一样返回true。
2.6 isNull(Objdect obj)和noNull(Object obj)
描述:前者是如果提供的参考地是null,返回true;后者是提供的参数是非,返回true。
[提示:在比较对象类型时,只要创建了对象即使没有给对象赋值,该对象也是不为空的]
2.7 toString(Object o)
描述:返回调用的结果toString对于非null参数,若参数为Null,fjhvnull。
代码如下:
public class Test01 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("HelloWorld!") ;
System.out.println(stringBuffer.toString());
}
}
复制代码