String

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 не перезаписан)
Используются, когда нужна делать много изменений в строке, чтобы не перегружать пул.

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(); Поэтому == никогда не будет работать! 

Комментариев нет:

Отправить комментарий