Looking for java Keywords? Try Ask4Keywords

Java Language Pitfall: Не понимая, что String является неизменным классом


пример

Новые программисты Java часто забывают или не могут полностью понять, что класс Java String неизменен. Это приводит к таким проблемам, как в следующем примере:

public class Shout {
    public static void main(String[] args) {
        for (String s : args) {
            s.toUpperCase();
            System.out.print(s);
            System.out.print(" ");
        }
        System.out.println();
    }
}

Вышеприведенный код должен печатать аргументы командной строки в верхнем регистре. К сожалению, это не сработает, случай аргументов не изменяется. Проблема заключается в следующем:

s.toUpperCase();

Вы можете подумать, что вызов toUpperCase() изменит s на верхнюю строку. Это не так. Это не может! String объекты неизменяемы. Они не могут быть изменены.

На самом деле метод toUpperCase() возвращает объект String который является строчной версией String которую вы вызываете ее. Вероятно, это будет новый объект String , но если s уже был в верхнем регистре, результатом может быть существующая строка.

Поэтому, чтобы эффективно использовать этот метод, вам нужно использовать объект, возвращенный вызовом метода; например:

s = s.toUpperCase();

Фактически правило «строки никогда не изменяется» применяется ко всем методам String . Если вы помните это, тогда вы можете избежать ошибок целой категории начинающих.