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
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'");
}
}
}