2017-01-24 9 views
0

Я новичок в программировании. У меня есть недоразумение со строками в Java. Как я знаю, строки в java неизменяемы. Это означает, что он не может быть изменен, но я видел множество примеров строк строки чтения с помощью string, а currentString всегда менялась в каждой итерации. Пожалуйста, помогите мне понять, почему это возможно и писать. Пример из URL Java read large text file with separatorЧтение строк из файла (строка за строкой) JAVA

BufferedReader br = null; 
try { 
    String sCurrentLine; 
    br = new BufferedReader(new FileReader("C:\\testing.txt"));//file name with path 
    while ((sCurrentLine = br.readLine()) != null) { 
      String[] strArr = sCurrentLine.split("\\+"); 
      for(String str:strArr){ 
       System.out.println(str); 
        } 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (br != null)br.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
+0

Неизменяемые, они означают, что экземпляры самих строк не могут быть изменены. Когда вы переназначаете переменную, вам присваивается другой экземпляр строки, старое значение не изменяется. – Rogue

ответ

0

В коде sCurrentLine не является объектом, но является ссылкой на объект. Каждый раз, когда строка итерируется, на нее ссылается новый объект String, поэтому значение sCurrentLine не изменяется, но ссылка на него меняется на новый объект String на каждой итерации, который, конечно, содержит разные значения.

См. Сообщение this, в котором объясняется неизменность строк намного лучше.

+0

Спасибо большое! – qmalt

0

В объектах Java String неизменяемы, ваше понимание правильное.

Строка s = новая строка ("ABC");

String S -> s - ссылочная переменная, его просто указатель, который можно повторно использовать только сдерживать, когда u указывает на другой объект, и вы потеряете ссылку предыдущего.

«ABC» или новая строка («ABC») является объектом в java, это неизменно.

В программе ur Строка str повторно используется как ссылочная переменная, но фактические объекты, которые будут собирать мусор после записи в файл, так как это приведет к разыменованию иона следующего цикла.

Надеюсь, я понял.

+0

Спасибо, очень! – qmalt

0

Вы путаетесь с переменной и ссылкой. Объекты String неизменяемы. Это означает, что объект String, к которому относится ваша переменная, не может быть изменен. Хотя вы можете переназначить переменную для новых объектов String.