Inicjalizacja Stringów w Javie

0

Witam !!
Obecnie poznaję tajniki Javy ;) i nurtuje mnie pewna kwestja, a mianowicie: Czym róznią się od siebie poniższe dwie linijki (porócz zapisu oczywiście ;) )
String str1 = new String("napis_1");
String str2 = "napis_2";

Jaka jest różnica w inicjalizacji tych Stringów ?...?...?...?

0

String str1 = new String("napis_1");
w ten sposob tworzysz nowy obiekt String

String str2 = "napis_2";
a w ten sposob przypisujesz do zmiennej typu String jakis tekst , a java automatycznie konwertuje ten tekst do obiektu String(czyli robi to co u gory )

ale ogolnie to jest jeden h** jak to napiszesz

0

Inicjalizowanie stringów przez String a = new String("blabla"); powoduje za każdym razem tworzenie nowej instancji obiektu. Natomist inicjalizowanie przez String b = "blabla"; powoduje utworzenie pojedyńczego obietku i wszelkie odwołania w kodzie do "blabla" to tak naprawdę odwołania do tego samego obiektu (referencje są współdzielone).

Przykład, który powinien trochę rozjaśnić sprawę:


/**
 * Created by IntelliJ IDEA.
 * User: yarel
 * Date: 2005-06-28
 * Time: 20:59:04
 */
public class Test {
    static String s1 = "blah";
    static String s2 = "blah";

    public static void main(String[] args) {
        String s3;
        String s4 = new String("blah");
        s3 = "blah";

        // porownanie przez metode
        if (s1.equals(s2)) {
            System.out.println("s1==s2");
        }
        
        // porownanie referencji
        if (s1 == s2) {
            System.out.println("s1==s2");
        } else {
            System.out.println("s1!=s2");
        }

        if (s3 == s1) {
            System.out.println("s3==s1");
        } else {
            System.out.println("s3!=s1");
        }

        if (s1 == s4) {
            System.out.println("s1==s4");
        } else {
            System.out.println("s1!=s4");
        }

        if ("blah" == s1) {
            System.out.println("s1== 'blah'");
        } else {
            System.out.println("s1!= 'blah'");
        }

    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1