:: (двойное двоеточие) оператор в Java 8

Итак, @James и @Brian объяснили, что означает 3L. Но почему вы его используете?

В большинстве случаев это не имеет значения, но иногда вы можете использовать его для ускорения работы вашего кода и потреблять меньше памяти . Двойной («числовой») вектор использует 8 байтов на элемент. Целочисленный вектор использует только 4 байта на элемент. Для больших векторов это меньше потраченная впустую память, а для процессора - меньше, поэтому она обычно быстрее.

В большинстве случаев это применимо при работе с индексами. Вот пример, когда добавление 1 к целочисленному вектору превращает его в двойной вектор:

x <- 1:100
typeof(x) # integer

y <- x+1
typeof(y) # double, twice the memory size
object.size(y) # 840 bytes (on win64) 

z <- x+1L
typeof(z) # still integer
object.size(z) # 440 bytes (on win64) 

... но также замечает, что чрезмерная работа с целыми числами может быть опасной:

1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!

... и, как отметил Г.Гавин, диапазон для целых чисел примерно от -2e9 до 2e9.

Следует заметить, что это относится к текущей версии R (2.13). R может изменить это в какой-то момент (64-битные целые числа будут милыми, что может позволить векторы длиной> 2e9). Чтобы быть в безопасности, вы должны использовать .Machine$integer.max всякий раз, когда вам нужно максимальное целочисленное значение (и отрицать это для минимума).

879
задан Olimpiu POP 17 December 2014 в 09:50
поделиться