HustleCoder
@HustleCoder

Почему неправильно работает этот код?

Вот простенькая программа для разворота числа:

import java.util.Scanner;

public class Main {
    private static void invertDigits(Integer number) {
        Integer temp = 0;
        while (number != 0) {
            temp = temp * 10 + number % 10;
            number /= 10;
        }
        number = temp;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Integer number;
        System.out.print("Enter number: ");
        number = scanner.nextInt();
        invertDigits(number);
        System.out.println("Reverse digit order: " + number);
     }
}


Результат:
Enter number: 123
Reverse digit order: 123


Вопрос, почему number не изменился? Ведь в функцию передается Integer, а это ссылочный тип.
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@Kot1que
1. Integer - неизменяемый.
2. https://stackoverflow.com/a/40523
import java.util.Scanner;

public class Main {
    private static Integer invertDigits(Integer number) {
        Integer temp = 0;
        while (number != 0) {
            temp = temp * 10 + number % 10;
            number /= 10;
        }
        return temp;
    }

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        Integer number;
        System.out.print("Enter number: ");
        number = scanner.nextInt();
        System.out.println("Reverse digit order: " + invertDigits(number));
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Это не так работает. Если бы Integer был мутабельный, и ты изменял его внутренности, то изменения были бы видны.
Возвращай значение из метода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы