Java: Неизменяемость аргументов функций
Рассмотрим функцию Math.round()
, которая округляет дробь до целого числа:
var number = 7.7
var newNumber = Math.round(number); // 8
System.out.println(newNumber); // => 8
Но что будет выведено на экран, если вызвать System.out.println(number);
? Выведется старое значение: 7.7
.
Функция Math.round()
вернула новые данные, но не изменила переданные в неё данные. Важнее, что она не могла это сделать в принципе, потому что аргументы функций в Java — неизменяемы.
Фактически, можно считать, что если функция f
объявлена с каким-то аргументом arg
, и она вызывается как f(number)
, то значение из переменной number
записывается в переменную arg
. Функция может изменять свою переменную arg
(находящуюся внутри функции), но такие изменения никак не повлияют на переменную number
. Даже если аргумент в сигнатуре функции тоже называется number
- это все равно другая переменная number
, а не та, значение которой передается в функцию.
Задание
Переведите строку, записанную в переменную str
, в верхний регистр, используя функцию toUpperCase()
. Новое значение запишите в ту же переменную str
.
Возможно, вам покажется, что код получился странным. Это типичный пример: переписывание переменных делает код менее понятным и более запутанным.
Советы
Изучить сигнатуру функции
toUpperCase
можно на странице java.lang.String