В чем разница между a = a.trim() и a.trim()?

Я столкнулся с небольшой путаницей.

Я знаю что String объекты неизменны. Это означает, что если я вызову метод из String класс, как replace() тогда оригинальное содержание String не изменены Вместо этого новый String возвращается на основании оригинала. Однако той же переменной могут быть назначены новые значения.

Основываясь на этой теории, я всегда пишу a = a.trim() где a это String, Все было хорошо, пока мой учитель не сказал мне, что просто a.trim() также может быть использован. Это испортило мою теорию.

Я проверил свою теорию вместе с моей учительницей. Я использовал следующий код:

String a = "    example   ";
System.out.println(a);
a.trim();      //my teacher's code.
System.out.println(a);
a = "    example   ";
a = a.trim();  //my code.
System.out.println(a);

Я получил следующий вывод:

    example   
    example   
example

Когда я указал на это своему учителю, она сказала:

это потому, что я использую более новую версию Java (jdk1.7) и a.trim() работает в предыдущих версиях Java.

Пожалуйста, скажите мне, кто имеет правильную теорию, потому что я абсолютно не знаю!

4 ответа

Решение

Строка неизменна в Java. А также trim() возвращает новую строку, поэтому вы должны вернуть ее, назначив ее.

    String a = "    example   ";
    System.out.println(a);
    a.trim();      // String trimmed.
    System.out.println(a);// still old string as it is declared.
    a = "    example   ";
    a = a.trim();  //got the returned string, now a is new String returned ny trim()
    System.out.println(a);// new string

Редактировать:

она сказала, что это потому, что я использую более новую версию java (jdk1.7) и a.trim() работает в предыдущих версиях java.

Пожалуйста, найдите нового учителя Java. Это полностью ложное утверждение без доказательств.

Простое использование "a.trim()" может обрезать его в памяти (или умный компилятор полностью отбросит выражение), но результат не будет сохранен, если вы не предшествуете присвоить его такой переменной, как ваш "a=a.trim();"

Строка неизменна, и любое изменение в ней создаст новую строку. Вы должны использовать присваивание в случае, если вы хотите обновить ссылку с помощью строки, возвращаемой из trim метод. Так что это должно быть использовано:

a = a.trim()

Вы должны хранить строковое значение в той же или другой переменной, если вы хотите какую-то операцию (например, обрезку) над строкой.

String a = "    example   ";
System.out.println(a);
a.trim();      //output new String is not stored in any variable
System.out.println(a); //This is not trimmed
a = "    example   ";
a = a.trim();  //output new String is  stored in a variable
System.out.println(a); //As trimmed value stored in same a variable it will print "example"
Другие вопросы по тегам