Для добавления немного больше к разговору Java является более портативным, если Вы остаетесь об одной версии позади - Java 5 все еще имеет много превосходных функций, таким образом, можно ожидать Java 6 и все еще иметь много диапазона с точки зрения языка и библиотек для разработки с. Mac является основной платформой, которая может занять время для ловли до последней версии Java.
Java также имеет превосходное организация по стандартизации , который разумно выращивает платформу на основе входа от многих различных компаний. Это - часто пропущенная функция, но это сохраняет даже новые возможности, работающие хорошо через несколько платформ, и обеспечивает много диапазона в поддержке библиотеки некоторых тайных вещей (как дополнительные расширения).
System.arraycopy ()
использует JNI (собственный интерфейс Java) для копирования
массив (или его части), так что это
невероятно быстро, как вы можете подтвердить
здесь ; clone ()
создает новый массив с теми же характеристиками, что и старый массив, т. Е. Того же размера, того же типа и того же содержание. Обратитесь к здесь за некоторыми примерами клона
в действии; ручное копирование
- это, в общем, ручное копирование. Об этом методе особо нечего сказать, за исключением того, что многие люди считают его наиболее производительным . arrayynew = arrayold
не копирует массив; он просто указывает arrayynew
на адрес памяти arrayold
или, другими словами, вы просто назначаете ссылку старому массиву. Первый вопрос. Почему это так, если ты расширить класс новым методом и затем создайте объект / экземпляр этого класса, вы не можете получить доступ к этому методу?
Поскольку вы расширили класс String, поэтому #ciao является методом класса, а не методом экземпляра.
String.send(:include, Greeter)
x = "foo bar"
x.ciao
# => "Ciao!"
Вторая часть, Когда я пытаюсь расширить Объект Fixnum, я получаю неопределенный ошибка метода. Может кто-нибудь объяснить почему это работает для строки, но не для fixnum?
Вот короткий ответ .
«Fixnums, Symbols, true, nil и false реализуются как немедленные ценности. С немедленными ценностями, переменные содержат сами объекты, а не ссылки на них.
Синглтон-методы не могут быть определены для таких объектов. Два фикснума одинаковое значение всегда представляет одно и то же экземпляр объекта, поэтому (например) переменные экземпляра для Fixnum с значение «один» распределяется между всеми «единицы» - это система. Это делает невозможно определить синглтон метод только для одного из них. "
Конечно, вы можете включить / расширить класс Fixnum, и каждый экземпляр Fixnum будет предоставлять методы в Mixin.
Это означает, что новый массив может быть больше или больше, чем исходный массив, и содержимое общего размера будет таким же, как у источника. Есть даже версия, которая позволяет создавать массив другого типа, и версия, в которой вы можете указать диапазон элементов для копирования ( Array.copyOfRange ()
).
Обратите внимание, что все из этих методов делают неглубокие копии. Это означает, что копируются только ссылки, хранящиеся в массивах, а указанные объекты не дублируются.