2016-08-31 2 views
-1

Я никогда не сомневался в том, что строки неизменяемы, пока я не понял, что мы можем конкатенировать строки в java. Например:Поскольку мы можем конкатенировать строки в Java, почему мы все еще называем строку неизменной?

String character = "ha"; 
String otherString = "Alo"; 
otherString=otherString+character; 
System.out.println(otherString); 

И это будет работать. Поэтому мы изменили строку под названием «otherString». Я не понимаю, что означает строка неизменяемо?

Спасибо за помощь!

+5

Поскольку конкатенация создает новый непреложный экземпляр. * * Переменная * является, ну, переменной и может быть изменена, чтобы указать на другой объект (или null); но объект, на который он указывает, является неизменным. –

+1

Не путайте переменные и объекты и не путайте присвоение с помощью вызова/метода. –

+0

Ваш пример не изменяет переменную, а переназначает ее. Неизбежно в этом контексте означает, что вы не можете выполнить 'otherString.substring (5);' и ожидать, что 'otherString' изменится. 'otherString' является объектом и этот объект не может быть изменен. Когда вы назначаете его новому значению, старый объект будет отброшен. – tresf

ответ

0

Кажется, что строки изменяются, но на самом деле создается новая строка. Из источника (http://docs.oracle.com/javase/tutorial/java/data/strings.html):

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