s1 è un oggetto stringa il cui valore è il letterale "q".
Un altro esempio:
codice:
String s1 = "q";
String s2 = "q";
System.out.println("s1 == s2 --> " + (s1 == s2 ? "true" : "false"));
System.out.println("s1.equals(s2) --> " + (s1.equals(s2) ? "true" : "false"));
String s3 = new String ("q");
String s4 = new String ("q");
System.out.println("s3 == s4 --> " + (s3 == s4 ? "true" : "false"));
System.out.println("s3.equals(s4) --> " + (s3.equals(s4) ? "true" : "false"));
Ti è più chiaro?
s1_____ s3-------> "q"
\"q"
s2_____/ s4-------> "q"
s1 ed s2 fanno riferimento alla stessa area di memoria
il cui valore è il letterale stringa "q"
s3 ed s4 invece fanno riferimento a due diversi oggetti
stringa, in quanto ciascun oggetto ha una propria zona
di memoria.
Spero di non complicarti le cose.
Ciao.