2014-10-24 2 views
0

Почему класс String неизменен в Java, так как каждый раз, когда мы вызываем определенные методы в ссылочной переменной String , создается новая String?Разница строк в java

public class Test { 

     public static void main(String [] args) { 

      String s = "abc"; 
      s.toUpperCase(); // new String is created here. 
      System.out.println(s);// prints abc instead of ABC 
    } 
} 
+6

Вы попросили ответить :) –

+0

http://programmers.stackexchange.com/questions/195099/why-is-string-immutable-in-java http://programmers.stackexchange.com/questions/190699/ когда-и-why-will-we-use-immutable-указатели/190913 # 190913 –

+1

Прочитайте документацию для String. 'toUpperCase' * возвращает * новую строку - оригинал не изменяется. –

ответ

1

Почему класс Строка неизменен в Java, так как каждый раз, когда мы называем некоторые методы ссылочной переменной строкового новая строка создается?

Нет. Это не из-за создания новой строки. Идите в обратном направлении. Почему каждый раз, когда вы получаете новую строку?

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

1

В java есть типы, экземпляры которых неизменяемы. кроме String, есть BigInteger, BigDecimal и Integer, Long, Double, Float, Short, Byte .(those wrapper types).. даже Boolean Эти экземпляры неизменяемы. Если вы сделаете что-то в этом экземпляре, то сам экземпляр экземпляра не будет изменен.

E.g.

Long num = 7L; 
num = num + 10L; 

после того, как вы запустите эти две линии, число будет 17, естественно. Но после того, как вы запустили вторую строчку, num будет новым экземпляром Long. То же, что String

Другой пример:

Boolean b = true; 
b = false; 

b в 1-й и 2-й линии разные случаи тоже.

Неизменяемые объекты относительно просты в проектировании, внедрении и использовании. I guess вот почему java применил непреложный дизайн.

Смежные вопросы