Java中copyOfRange()函数深度理解
平常我们说copyOfRange(original,int from,int to)该方法是从original数组的下标from开始赋值,到下标to结束,不包括下标为to的元素。实际上看完代码应该这样理解copyOfRange(original,int from,int to)该方法返回一个长度为to-from的数组,其中from~min(original.length,to)之间的元素(不包括min(original.length,to))是从数组original复制的元素,剩下的值为0。
演示代码1:
package niuke;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{1};//Java中数组初始化
int[] m=Arrays.copyOfRange(n, 0, 5);
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
运行结果:![]()
Arrays.copyOfRange(n, 0, 5);意思是返回一个长度为to-from即5-0=5的数组,从n数组下标0开始复制,由于n数组只有一个元素,故复制一个就没有可以复制的,剩下的4个元素默认为0。
演示代码2:
package niuke;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{1,2,3,4,5};//Java中数组初始化
int[] m=Arrays.copyOfRange(n, 0, 3);
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
运行结果:![]()
Arrays.copyOfRange(n, 0, 3);的意思是返回一个长的为3-0=3的数组,从n数组0开始复制,由于数组n的长度大于3,因此直接从n数组0下标开始复制3个元素返回即可。
演示代码4:
package niuke;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{1};//Java中数组初始化
int[] m=Arrays.copyOfRange(n, 1, 3);
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
运行结果:
n数组没有可以复制的,所以m数组全为0。
演示代码4:
package niuke;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{1};//Java中数组初始化
int[] m=Arrays.copyOfRange(n, 1, 1);
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
该运行没有任何输出,因为它返回的是一个长度为1-1=0的数组。
演示代码5:
长度为0的数组是存在的,只是输出啥也没有。
package niuke;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{};
int[] m=new int[0];
for(int i=0;i<n.length;i++) {
System.out.print(n[i]+" ");
}
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
演示代码6:
package niuke;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{1};//Java中数组初始化
int[] m=Arrays.copyOfRange(n, 1, 0);
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
运行结果: 会抛出异常,因为不存在长度为0-1=-1的数组。

演示代码7:
package niuke;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] n=new int[]{1};//Java中数组初始化
int[] m=Arrays.copyOfRange(n, 2, 3);
for(int i=0;i<m.length;i++) {
System.out.print(m[i]+" ");
}
}
}
运行结果:
抛出数组越界异常。根据copyOfRange(original,int from,int to)该方法返回一个长度为to-from的数组,其中from~min(original.length-to,to)之间的元素(不包括min(original.length-to,to))是从数组original复制的元素,剩下的值为0。此时min(original.length-to,to)=min(1-2,3)=min(-1,3)=-1,下标为-1是非法的。
以上是我通过调试对该函数的理解。
永远相信美好?