java数组api (off, len) 与 (begin, end)的问题
2017-06-27 00:55
246 查看
前言
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
总结
别嫌我笨,咱们还能愉快的玩耍如果这样换算出错了,提刀来见我(我肯定剁了你
<- _ -!>)
相关文章推荐
- Java学习,数组的相关操作,封装类,Class类,反射API
- Java高维数组问题
- 数组实现的约瑟夫问题(Java)
- java笔记:关于复杂数据存储的问题--基础篇:数组以及浅拷贝与深拷贝的问题(上)
- java数组的问题
- JAva Excel api 中的编码和中文问题
- java如何用数组解决大数阶乘的问题,例如求n!,n=100000
- java的数组问题
- 本地方法处理java数组/引用问题/缓存jfieldID/jmethodID
- java笔记:关于复杂数据存储的问题--基础篇:数组以及浅拷贝与深拷贝的问题(上)
- JAVA里面关于byte数组和String之间的转换问题
- 【原创】Java中数组的合并问题
- 读取纯真IP数据库QQwry.dat的java版程序报数组越界异常问题
- JAVA里面关于byte数组和String之间的转换问题
- JAVA Object[]数组转化问题
- JAVA里面关于byte数组和String之间的转换问题
- Java对象数组初始化与NullPointerException问题
- 有关JAVA数组初始化的问题和加入JAR包的问题
- java 关于primitive数组 内存问题
- Java第六课 数组的复制与排序,Runtime类与Process类,Class类与反射API,Runtime类与单例设计模式。