Описание проблемы: - Во время одной дискуссии я обнаружил, что программист застрял в точке, и я подумал, что должен поставить на форум.Имеет ли встроенные методы в Java, зависит от операционной системы?
Сегодня я искал преобразование массива в массив символов. И я проверил определение метода toCharArray() класса string.
char str[] = "native".toCharArray();
toCharArray определение(): -
public char[] toCharArray() {
char result[] = new char[count];
getChars(0, count, result, 0);
return result;
}
определение GetChars: -
public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin){
if(srcBegin<0){
throw new StringIndexOutOfBoundsException(srcBegin);
}
if(srcEnd>count){
throw new StringIndexOutOfBoundsException(srcEnd);
}
if(srcBegin>srcEnd){
throw new StringIndexOutOfBoundsException(srcEnd-srcBegin);
}
System.arraycopy(value,offset+srcBegin,dst,dstBegin,srcEnd-srcBegin);
}
Затем нативный метод: -
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
Здесь мне не нужно понимать родной, но я должен знать. В таком нативном методе определите здесь то же самое, что и другой собственный метод определит для другой операционной системы.
@shivquery Вы видите, когда Java не располагала оптимизацией JIT (как раз вовремя) и JSM HotSpot, каждая строка байт-кода должна была интерпретироваться и затем выполняться. (программы по-прежнему можно запустить таким образом, если хотите). Поэтому, поскольку Java работает намного медленнее, чем собственный код, а так как 'System.arraycopy' был большим методом, они решили сделать его «родным». Теперь программы Java имеют близкие скорости, поэтому нет необходимости делать их родными. Однако, чтобы сделать определение метода тем же, они оставили его как «native». – gparyani