==
тесты для ссылочного равенства (независимо от того, являются ли они одним и тем же объектом).
.equals()
тесты для равенства значений (независимо от того, являются ли они логически «равными»).
Objects.equals () проверяет наличие null
перед вызовом .equals()
, поэтому вам не нужно (доступно с JDK7, также доступным в Guava ).
String.contentEquals () сравнивает содержимое String
с содержимым любого CharSequence
(доступно с Java 1.5).
Следовательно, если вы хотите проверить, имеет ли две строки одно и то же значение, вы, вероятно, захотите использовать Objects.equals()
.
// These two have the same value
new String("test").equals("test") // --> true
// ... but they are not the same object
new String("test") == "test" // --> false
// ... neither are these
new String("test") == new String("test") // --> false
// ... but these are because literals are interned by
// the compiler and thus refer to the same object
"test" == "test" // --> true
// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true
// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true
Вы почти всегда хотите использовать Objects.equals()
. В редкой ситуации, когда вы знаете, что имеете дело с интернированными строками, вы можете использовать ==
.
Из JLS 3.10. 5. Строковые литералы :
Кроме того, строковый литерал всегда ссылается на тот же экземпляр класса
blockquote>String
. Это связано с тем, что строковые литералы, или, в более общем смысле, строки, которые являются значениями константных выражений ( §15.28 ), «интернированы», чтобы обмениваться уникальными экземплярами, используя методString.intern
.. Подобные примеры также можно найти в JLS 3.10.5-1 .
Статья Wikipedia о Аппаратный генератор случайных чисел списки несколько интересных источников для случайных чисел с помощью физических свойств.
Мое избранное:
Эти , проблемный раздел из статьи Wikipedia также описывает хрупкость большого количества этих источников/датчиков. Датчики почти всегда производят все менее случайные числа, как они стареют/ухудшают. Эти физические источники должны постоянно проверяться статистическими тестами, которые могут проанализировать сгенерированные данные, гарантировав, что инструменты не повредились тихо.
Некоторый ввод с клавиатуры использования (тайм-ауты между нажатиями клавиш), я слышал о, я думаю в романе, что радио-статический прием может использоваться - но конечно который требует другого аппаратного и программного обеспечения...
Шум сверху спектра Космического сверхвысокочастотного фона. Конечно, необходимо сначала удалить некоторую анизотропию, основные объекты, коррелированые шумы детекторного каскада, галактику и локальные групповые скорости, поляризация и т.д. Многие ловушки остаются .
Некоторые TPM (Модуль Надежной платформы) "микросхемы" имеют аппаратные средства RNG. К сожалению, (Broadcom) TPM в моем ноутбуке Dell испытывает недостаток в этой функции, но много компьютеров, проданных сегодня, идут с аппаратными средствами RNG, который использует действительно непредсказуемые квантовые процессы механического устройства. Intel реализовал разнообразие теплового шума.
кроме того, не используйте одно только текущее время для отбора RNG в криптографических целях или любого приложения, где непредсказуемость важна. Используя несколько битов низкоуровневых со времени в сочетании с несколькими другими источниками, вероятно, хорошо.
А подобный вопрос может быть полезен для Вас.
Я использовал программу шифрования, которая использовала пользовательское движение мыши для генерации случайных чисел. Единственная проблема состояла в том, что программа должна была приостановить и попросить, чтобы пользователь переместил мышь случайным образом в течение нескольких секунд для работы правильно, который не мог бы всегда быть практичным.
Современные RNGs и проверяются по корреляциям в соседних семенах и выполняют несколько сотен повторений после отбора. Так, к сожалению, скучный, но истинный ответ - то, что это действительно не имеет значения очень.
Вообще говоря, использование случайные физические процессы должны быть проверены, что они соответствуют равномерному распределению и иначе detrended.
, По-моему, часто лучше использовать очень хорошо понятый генератор псевдослучайного числа.
Ядро Linux использует синхронизацию прерывания устройства (мышь, клавиатура, жесткие диски) для генерации энтропии. Существует хорошее статья о Википедии на энтропии.
Не волнуйтесь о "хорошем" семени для генератора случайных чисел. Статистические свойства последовательности не зависят от того, как генератор отобран. Существуют другие вещи, как бы то ни было. волноваться о. См. Ловушки в Генерации случайных чисел .
Что касается аппаратных генераторов случайных чисел, эти физические источники должны быть измерены, и измерительный процесс имеет систематические ошибки. Вы могли бы найти, что "псевдо" случайные числа имели более высокое качество, чем "реальные" случайные числа.
SGI однажды использовал фотографии лампы лавы в различных "фазах шарика" как источник для энтропии, которая в конечном счете развилась в генератор случайных чисел с открытым исходным кодом, названный LavaRnd.
Я использую Random.ORG , они обеспечивают свободные случайные данные из Атмосферных помех, которые я использую для периодического пересевания Mersene-Twister RNG. Его почти столь случайный, как можно добраться без аппаратных зависимостей.
Я нашел HotBits несколько лет назад - числа сгенерированы от радиоактивного распада, действительно случайный числа.
существуют пределы на то, сколько чисел можно загрузить день, но меня всегда развлекало использовать их как действительно, действительно случайные семена для RNG.
Источник семени не так очень важен. Более важный псевдо алгоритм генератора чисел. Однако я услышал некоторое время назад о генерации семени для некоторых банковских операций. Они взяли много факторов вместе:
, Даже если некоторые из этих параметров не изменяются очень вовремя, можно поместить их в некоторую хорошую хеш-функцию.
, Как генерировать хорошее случайное число?
, Возможно, мы можем принять во внимание inifinite количество вселенных? Если это верно, это все время, новые параллельные вселенные создаются, мы можем сделать что-то вроде этого:
int Random() {
return Universe.object_id % MAX_INT;
}
В каждый момент мы должны быть на другом ответвлении параллельных вселенных, таким образом, у нас должен быть другой идентификатор. Единственная проблема состоит в том, как получить объект Вселенной :)
sum
и len
параллельно, также избегая O (n) пространство.
– Don Stewart
4 December 2012 в 07:50
не волнуются о "хорошем" семени для генератора случайных чисел. Статистические свойства последовательности не зависят от того, как генератор отобран.
я не соглашаюсь с совет John D. Cook . При отборе вихря Мерсенна со всеми битами, обнуленными кроме одного он первоначально генерирует числа, которые совсем не случайны. Требуется много времени, чтобы генератор взболтал это состояние во что-либо, что прошло бы статистические тесты. Просто установка первых 32 битов генератора к семени будет иметь подобный эффект. Кроме того, если все состояние будет обнулено, то генератор произведет бесконечный, обнуляет.
Правильно написанный код RNG будет иметь правильно записанный алгоритм отбора, который принимает, говорят, что 64 битовых значения и отбирают генератор, таким образом, это произведет достойные случайные числа для каждого возможного входа. Таким образом, если Вы будете пользоваться надежной библиотекой затем, то любое семя сделает. Но если Вы взламываете вместе свою собственную реализацию затем, необходимо быть осторожными.
fun
, можно звонить (compile 'fun)
(при подсказке REPL, сказать), и это компилируется, и скомпилированный код связан во время выполнения. Метод подготовки соответствовал бы там приятно. Имея быть скомпилированным, функция воплощает предварительно обработанное знание списка, и применение (несколько раз) таким образом скомпилированная функция более эффективна, как книга, с которой Вы связались, объясняет.
– Will Ness
18 December 2012 в 07:32
Как насчет остановки потока, который будет манипулировать некоторой переменной в жестком цикле в течение фиксированного промежутка времени, прежде чем он будет уничтожен. То, что вы получите, будет зависеть от скорости процессора, загрузки системы и т. Д. Очень странно, но лучше, чем просто srand (time (NULL)) ...