Использование строк в списках Java

#java #string #list

#java #строка #Список

Вопрос:

Я знаю, что Java имеет идиоматическое поведение в отношении манипулирования строками. Поскольку строки неизменяемы, мы не можем изменить содержимое. Поэтому мы не можем написать:

 String s="test;"
s.toUpperCase();
  

Нам нужно присвоить результат s.toUpperCase() новой переменной, например:

 String s1="test";
String s2=s1.toUpperCase;
  

s1.toUpperCase это не строка s1 , которая была изменена на верхний регистр. Это новая строка со своим собственным местоположением в памяти.
Итак s1 , и s2 ссылаются на две заполненные разные ячейки памяти с двумя копиями литературы «test» и «TEST».
Но если мы не хотим использовать новую переменную для назначения новой строки, мы можем сделать это:

 String s="test";
s=s.toUpperCase();
  

Вопрос:
Можем ли мы сделать то же самое со списком? Переменная s представляет ячейку памяти, которая имеет значение «test». Итак, в s=s.toUpperCase(); мы s указываем на новый адрес созданной строки s.toUpperCase() . Если в List<String> list list.get(0) точке (like s ) указано местоположение строки, почему мы не можем сделать то же s самое, что и like: list.get(0)=list.get(0).toUpperCase() или любым другим способом, например, как работают массивы:

 String[] array={"test1","test2"};
array[0]=array[0].toUpperCase();
  

Комментарии:

1. list.get(0) возвращает значение, поэтому вы ничего не можете ему присвоить. Конечно, вы можете использовать list.set(0, list.get(0).toUpperCase()) etc.

2. Из-за инкапсуляции. list.get(idx) был разработан для возврата значения с определенным индексом. Вы не можете заставить его делать то, что вы хотите.

Ответ №1:

list.get(0)=list.get(0).toUpperCase() запрещено грамматикой и семантикой Java.

Грубо говоря (подробности более сложны, см. 15.26.1. Простой оператор присваивания = для получения более подробной информации), левая часть присваивания должна быть переменной (или полем). Но list.get(0) это не так, это значение, поэтому вам нужно использовать какой-то метод, который позволит вам изменить значение соответствующего элемента списка:

 list.set(0, list.get(0).toUpperCase())
  

Комментарии:

1. Я понимаю… таким образом, нет способа работать со строковым списком, как строка массива: String[] array={«test1″,»test2»}; array[0]=array[0].Прописной ();

2. и что такое «значение»? Возвращаемая вещь не является строкой? Строка — это объект, а не абстрактная вещь, такая как «значение».

3. 3 — это значение, как вы думаете, его можно изменить? Сделайте разницу между значением и полем, в котором оно хранится…

4. 3 — это удобный вариант обмана, потому что он примитивный, а не объект.