导航:首页 > 源码编译 > arraycopy源码

arraycopy源码

发布时间:2023-10-03 21:00:01

1. 为什么Python list的索引从0开始

如果你的l是如此定义的
List l=new ArrayList();
那么抛出此异常是非常正确的!因为java源码如下:
public void add(int index, E element) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
//你的程序就符合index>size,所以就抛出IndexOutOfBoundsException
ensureCapacity(size+1); // Increments modCount!!
System.array(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}

2. 如何查看java源码中的native方法源码

下载JDK源代码啊,openJDK上有完整的JDK源代码,JDK源代码由C++、Java、C、汇编 这四种语言组成。JVM主体是C++写的,JNI部分是C,工具类是Java写的,JVM里混有汇编代码。路径:openjdk-7-fcs-src-b147\jdk\src\share\native\java\lang\System.c 找到这个
/* Only register the performance-critical methods */
static JNINativeMethod methods[] = {
{"currentTimeMillis", "()J", (void *)&JVM_CurrentTimeMillis},
{"nanoTime", "()J", (void *)&JVM_NanoTime},
{"array", "(" OBJ "I" OBJ "II)V", (void *)&JVM_ArrayCopy},
};

方法的实现应该在JVM部分,路径openjdk-7-fcs-src-b147\hotspot\src\share,不同的操作系统实现不一样,应该是在对应的操作系统的包下

3. String类源码笔记(一):成员变量和构造器

String类表示字符串,所有类似"abc"形式的字符串(或魔法字符串)都被看作是这个类的实例。String是不可变的,当一个字符串在常量池中被创建时,他的值就不会被改变。

所在路径:javalangString.java

为了保证String类是一个不可变类,String类的成员变量多为私有和不可变的。

其中serialPersistentFields在序列化时使用:

JDK8的String类一共有16个构造器,其中两个是@Deprecated,一个是私有构造器,剩下的13个是可以调用的。

无参构造器直接将""的value赋值给当前类的value。""的value是一个空的char[],其length为0。调用使用了无参构造器的String对象的isEmpty()方法会得到true,调用length()方法会得到0,判断其==null会得到false。

入参为String对象时,构造器会对其进行直接取值。

入参为字符串数组时,构造器调用的是Arrays.Of()方法。

其中Arrays.Of()方法是为了将入参的字符串序列深拷贝到this.valuie中,他的源码为:

其中System.array()方法的源码为:

这个方法支持直接传入想要生成的String的母串,通过偏移量和有效长度找出需要赋值给this.value的部分,然后调用Arrays.OfRange()方法进行深拷贝。

当需要将一个Unicode编码序列转换为String时,可以使用以下构造器:

当需要将一个bytes[]转换为String时,可以使用以下构造器:

此外,还有一些将上述构造器进一步封装的构造器,其本质都是简化入参。另外,String类的构造器同样支持传入StringBuffer和StringBuilder。如果传入的是StringBuffer,构造器会为其加锁。如果传入的是StringBuilder则不会加锁。

事实上,StringBuffer和StringBuilder的toString()方法调用的也是String类的构造器,他们最终的底层实现都是Arrays.Of()。

最后,String类还提供了一个保护类型的构造方法。该方法相比入参为char[]的构造器多了一个share参数,这个参数并没有实际作用,只是用来和其他构造器进行区分。当String类内部调用该构造器时:

该构造器不能对外暴露的原因是需要保持String类的不可变性。

阅读全文

与arraycopy源码相关的资料

热点内容
6s怎么外接u盘需要什么app 浏览:131
linux查看文件权限命令 浏览:685
安卓手游存档怎么用 浏览:761
linuxyum安装ftp 浏览:690
村委会主任可以推行政命令吗 浏览:102
电脑文件夹封面多张图片 浏览:263
网吧总服务器叫什么 浏览:922
多个算法解决同一个问题 浏览:455
小车解压后我的购车发票呢 浏览:977
做app开发用什么云服务器 浏览:177
linux网卡子接口 浏览:985
21岁职高毕业学程序员怎么学 浏览:321
vs如何对单个文件编译 浏览:6
为什么有的电脑不能安装python 浏览:75
金蝶迷你版加密狗检测到过期 浏览:186
硬件描述语言编译结果 浏览:655
程序员逆天改命 浏览:19
金斗云服务器 浏览:447
港口工程pdf 浏览:770
程序设计语言pdf 浏览:434