public class JavaBug {
public static void main(String[] args) {
// jdk1.5.0_07 - Windows XP SP2
String s1 = "Java";
//Ispisuje: false
System.out.println("s1 == Java: " + s1 == "Java");// FALSE
//Ispisuje: (s1 == Java): true
System.out.println("(s1 == Java): " + (s1 == "Java"));// TRUE
//Ispisuje: s1.equals("Java"): true
System.out.println("s1.equals(\"Java\"): " + (s1.equals("Java")));// TRUE
}
}
Pokrenite ovaj kod i videcete o cemu je rec..
Znaci umesto da ovaj code:
System.out.println("s1 == Java: " + s1 == "Java");// FALSE
Ispise:
s1 == Java: false
On ispisuje samo false ...
E sad zasto se taj kod ne ponasa isto kako kad stavim u zagrade (s1 == "Java") ??
Znaci Zagrade imaju prioritet izvrsavanja to ja razumem.. Ali isto bi trebalo da bude i bez zagrade tj da dobijem isti rezultat..
Zasto se gubi text ovde:
System.out.println("s1 == Java: " + s1 == "Java");// FALSE
I ispisuje samo false ???
Gde je nestao text s1 == Java: ??
ili recimo:
public class JavaBug {
public static void main(String[] args) {
// jdk1.5.0_07 - Windows XP SP2
String s1 = "Java";
//Treba da ispise: s1 == Beginning Java: false END ali spisuje samo false
System.out.println("Beginning s1 == Java: " + s1 == "Java" + "END");// FALSE
//Displays: (s1 == Java): true
System.out.println("(s1 == Java): " + (s1 == "Java"));// TRUE
//Displays: s1.equals("Java"): true
System.out.println("s1.equals(\"Java\"): " + (s1.equals("Java")));// TRUE
}
}
U ovome codu ima da se izgubi i pocetak i kraj stringa i ispisace samo FALSE umesto da ispise:
Beginning s1 == Java: false END
Inace znam da + ima veci prioritet u odnosu na ==
S toga dobijamo:
("s1 == Java: "+s1) == "Java" ??? sto naravno rezultira ka false ??
Ili
("Beginning s1 == Java: " + s1 ) == "Java" + ("END")// FALSE
Sta vi mislite o ovome ??
Poz
sale