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


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе