Цитата(powerOn @ 22.10.2006, 16:36 ) | | Компилятор оптимизирует инициализации строковых переменных, поскольку эти строки все равно неизменны, выделять лишнюю память нет необходимости. Поэтому и s1 и s2 будут ссылками на одну и тут же строку в памяти. |
Да, верно, и, насколько я знаю, это на совести компилятора. Для полной уверености:
| Код |
public String intern() Returns a canonical representation for the string object. A pool of strings, initially empty, is maintained privately by the class String.
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.
It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.
All literal strings and string-valued constant expressions are interned. String literals are defined in §3.10.5 of the Java Language Specification
Returns: a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.
--------------------------------------------------------------------------------
|
|