Суть в следующем: где результат Math.random() * 10
физически , сохраненный на вашем компьютере при запуске вашей программы? Вы перечисляете два варианта.
Опции 1: Поле экземпляра
В этом случае компилятор дает указание вашей операционной системе зарезервировать место для переменной int
на весь срок службы объекта Player
. Объект игрока может жить в течение микросекунд, секунд, минут, часов, дней, месяцев, ... это зависит! Это место для хранения обычно находится в ОЗУ компьютера, и с Java вы можете получить к нему доступ с помощью синтаксиса myPlayer.number
, если у вас есть ссылка на Player где-нибудь.
Опции 2: Возвращаемое значение
В этом случае компилятор находит место для хранения результата вычислений в регистре виртуальной машины Java, который можно мысленно отобразить в регистр физического процессора. Это значение будет в лучшем случае сохраняться только в течение нескольких тактов процессора (в процессоре с частотой GHz есть газилино, так что это действительно крошечная доля секунды), если вы не сохраните его где-то еще, а если нет потерян навсегда . Смотрите следующий пример:
private int someRandom;
private int gimmeARandom() {
return Math.random() * 10;
}
private int test() {
int someRandom = gimmeARandom(); // --> store the value until end of method
this.someRandom = someRandom; // --> further keep it so we can read it later
gimmeARandom(); // --> what did it returned? We'll never know
}