原创作品转载请注明出处
/*
* Arrays类包含了操作数组的各种方法,没有提供构造方法
* 所有的成员方法都是static的,可以通过类名访问
* java.util.Arrays直接继承java.lang.Object
* 但是注意 public static String toString(int[] a)
* public static String toString(double[] a)等
* 并不是重写了Object里的public String toString()
*
* public static String toString(Object[] a)
* public static void sort(Object[] a)
*
* Arrays.sort() 有int[] float[] double[] 而不是都使用 Object
* 是对于数值比较的时候避免转型,提高效率
*
* 对于Object类型的数组在比较的时候用到了comparable接口强制转换后通过compareTo进行比较
*
*
*/
import java.util.Arrays;
public class DemoArrays {
public static void main(String[] args) {
int[] a = {1,23,4,45,4};
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}
output:
[1, 23, 4, 45, 4]
[1, 4, 4, 23, 45]
public static String toString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i])); //用到了String.valueOf()
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
//valueOf就是调用了对象的toString()
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Arrays类中只提供了一个无参的构造方法,并且由private修饰,外界无法使用,并且API中也看不到任何构造方法。
// Suppresses default constructor, ensuring non-instantiability.
// 抑制默认构造函数,确保不可以实例化
private Arrays() {}
Arrays类的这种设计是常用的工具类的设计思想:
构造方法私有,外界无法创建对象;成员都用static修饰,让外界通过类名直接访问。
Math,Collection等类也是如此。