在看String类的源码时,发现String类里的toCharArray()方法中有一段注释如下:
经多方查找资料后,现解释如下:
虽然String 和Arrays 都属于rt.jar中的类,但是BootstrapClassloader 在加载这两个类的顺序是不同的。所以当String.class被加载进内存的时候,Arrays此时没有被加载,所以直接使用肯定会抛异常。而System.arrayCopy是使用native代码,则不会有这个问题。
另外有同学说把代码换掉以后也能运行, 那是因为换掉代码的时候 JVM已经加载完了所有的系统类, 所以才会看到也能正常运行。