您的位置:首页 > 编程语言 > Java开发

java数组api (off, len) 与 (begin, end)的问题

2017-06-27 00:55 211 查看

前言

java 关于操作数据的api中大多是如题目的两种形式,例如:

public static char[] copyOfRange(char[] original, int from, int to)


public static native void arraycopy(Object src,  int  srcPos,
Object dest, int destPos,
int length);


以前就知道关于(begin, end)的参数是截头不截尾的。

char[] chars = {'a', 'b', 'c', 'd'};
Arrays.copyOfRange(chars, 1,3);


会返回字符数组{‘b’, ‘c’}

返回的数组长度为 end - begin ==> 2

而(off, len)代表从off处截取len个长度的数组

实际截取的长度为len

例如:

char[] chars = {'a', 'b', 'c', 'd'};
char[] cy = new char[5];
System.arraycopy(chars, 1, cy, 1, 3);


得么的cp字符数组应该是{‘b’, ‘c’, ‘d’, ‘\u0000’, ‘\u0000’}

实际截取了3个长度

关于越界问量的思考

以前在使用这样的方法时,超级害怕越界问题,每次都瓣着手指头算半天,今天算是开窍了。

如果是(begin, end)这样的参数,只需要判断:

end > srcArr.length就可以, 如果该条件为真,则肯定会发生越界

如果是(off, len)这样的参数,只需要判断:

off + len > srcArr.length, 如果该条件为真,则肯定会发生越界

二者之间的换算问题

(begin, end) 换算成 (off, len)

off = begin
len = end - begin


(off, len) 换算成 (begin, end)

begin = off
end =
4000
off + len


总结

别嫌我笨,咱们还能愉快的玩耍

如果这样换算出错了,提刀来见我(我肯定剁了你
<- _ -!>
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: