String - immutable!!!!!!!!!!!!!!!!!!
String s = "abc"; - помещает строку в пул. Можно применять оператор "==".
s = s.concat(" sda"); - помещает в пул еще две строки " sda" и "abc sda" (если s.concat(" sda") s.replace('a', 'x') без присвоения, то новая строка потеряется в пуле).
String s = new String("abc"); - создает новую строку (обьект в не в пуле, а в обычном хипе. Но к этом еще появляется "abc" в пуле). Не использовать так как создается лишний обьект. Оператор "==" будет давать false.
StringBuilder - потоко незащищенный. (equals и hasCode не перезаписан)
StringBuffer - потоко защищенный. (equals и hasCode не перезаписан)
Используются, когда нужна делать много изменений в строке, чтобы не перегружать пул.
String s = "abc"; - помещает строку в пул. Можно применять оператор "==".
s = s.concat(" sda"); - помещает в пул еще две строки " sda" и "abc sda" (если s.concat(" sda") s.replace('a', 'x') без присвоения, то новая строка потеряется в пуле).
String s = new String("abc"); - создает новую строку (обьект в не в пуле, а в обычном хипе. Но к этом еще появляется "abc" в пуле). Не использовать так как создается лишний обьект. Оператор "==" будет давать false.
StringBuilder - потоко незащищенный. (equals и hasCode не перезаписан)
StringBuffer - потоко защищенный. (equals и hasCode не перезаписан)
Используются, когда нужна делать много изменений в строке, чтобы не перегружать пул.
System.out.println(a + b + "sss" + a + b); // 10sss55
System.out.println((a + b) + "sss" + (a + b)); 10sss10/
public class Test138
{
public static void stringReplace (String text)
{
text = text.replace ('j' , 'c'); /* Line 5 */
//этот метод не сработает так String immutable ( "работает как примитив, а не по ссылке")
}
public static void bufferReplace (StringBuffer text)
{
text = text.append ("c"); /* Line 9 */
}
public static void main (String args[])
{
String textString = new String ("java");
StringBuffer textBuffer = new StringBuffer ("java"); /* Line 14 */
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println (textString + textBuffer);
//выведет javajavac
}
}
String a = "newspaper";
a = a.substring(5,7);
char b = a.charAt(1);
a = a + b;
System.out.println(a); //app
public class Main {
public static void main(String[] args) {
String strA = "text";
String strB = "text";
strA += "1";
strB += "1";
System.out.println(strA == strB);
strA = "text1";
strB = "text1";
System.out.println(strA == strB);
}
} //false true. При конкатенации строк создается
strA = new StringBuilder().append(strA).append("1").toString(); Поэтому == никогда не будет работать!
Комментариев нет:
Отправить комментарий