1、toString 返回指定数组内容的字符串表示形式。
demo:
由demo可窥见Arrays.toString的所做的工作就是将数组元素转换为字符串(以逗号分割数组元素,包裹在方括号中)。
源码:
1 public static String toString(int[] a) {2 //数组为null,则返回null
3 if (a == null)4 return "null";5 int iMax = a.length - 1;6 //空数组,则返回"[]"
7 if (iMax == -1)8 return "[]";9
10 //创建StringBuilder对象,用于存放结果
11 StringBuilder b = newStringBuilder();12 //返回结果以左中括号([)开头
13 b.append('[');14 //遍历数组
15 for (int i = 0; ; i++) {16 b.append(a[i]);17 if (i ==iMax)18 return b.append(']').toString();//中括号结束
19 b.append(","); //逗号分割
20 }21 }
View Code
2、
demo:
源码:
1 public staticString deepToString(Object[] a) {2 if (a == null)3 return "null";4
5 int bufLen = 20 *a.length;6 //java数组用int类型数据作索引,理论最大长度Integer.MAX_VALUE。7 //如果数组足够大,则 20 * a.length 可能会溢出
8 if (a.length != 0 && bufLen <= 0)9 bufLen = Integer.MAX_VALUE; //若溢出,就取 Integer.MAX_VALUE10 //创建StringBuilder用来存放结果
11 StringBuilder buf = newStringBuilder(bufLen);12 deepToString(a, buf, new HashSet<>());13 returnbuf.toString();14 }15
16 private static voiddeepToString(Object[] a, StringBuilder buf,17 SetdejaVu) {18 if (a == null) {19 buf.append("null");20 return;21 }22 int iMax = a.length - 1;23 if (iMax == -1) {24 buf.append("[]");25 return;26 }27
28 dejaVu.add(a);29 buf.append('[');30 //遍历数组
31 for (int i = 0; ; i++) {32
33 //取数组元素
34 Object element =a[i];35 if (element == null) {36 buf.append("null");37 } else { //数组元素不为 null38 //获取数组元素的类型类
39 Class> eClass =element.getClass();40
41 if (eClass.isArray()) { //数组的元素仍然是数组42 //8种基本数据类型,直接调用Arrays.toString处理
43 if (eClass == byte[].class)44 buf.append(toString((byte[]) element));45 else if (eClass == short[].class)46 buf.append(toString((short[]) element));47 else if (eClass == int[].class)48 buf.append(toString((int[]) element));49 else if (eClass == long[].class)50 buf.append(toString((long[]) element));51 else if (eClass == char[].class)52 buf.append(toString((char[]) element));53 else if (eClass == float[].class)54 buf.append(toString((float[]) element));55 else if (eClass == double[].class)56 buf.append(toString((double[]) element));57 else if (eClass == boolean[].class)58 buf.append(toString((boolean[]) element));59 else { //element is an array of object references60 //循环引用,制防止死循环
61 if(dejaVu.contains(element))62 buf.append("[...]");63 else //非基本数据类型(基本数据类型的包装类,或其他对象),则继续递归处理
64 deepToString((Object[])element, buf, dejaVu);65 }66 } else { //element is non-null and not an array67 //数组元素不是null且不是一个数组,则直接调用元素的toString方法68 //如果是包装类,则调用其类中的toString;69 //如果是其他对象,则调用对象重写过的的toString,否则调用Object.toString
70 buf.append(element.toString());71 }72 }73 if (i ==iMax)74 break;75 buf.append(", ");76 }77 buf.append(']');78 dejaVu.remove(a);79 }
View Code
3、copyOf 从原数组复制指定长度到新数组。
demo:
源码:
public static int[] copyOf(int[] original, intnewLength) {//newLength长度的新数组
int[] copy = new int[newLength];//复制原数组到新数组
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));returncopy;
}
java.lang.System.arraycopy() 方法复制指定的源数组的数组,在指定的位置开始,到目标数组的指定位置。如下:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Object src : 原数组
int srcPos : 从元数据的起始位置开始
Object dest : 目标数组
int destPos : 目标数组的开始起始位置
int length : 要copy的数组的长度
4、
---恢复内容结束---