
Originariamente inviata da
andbin
Sì, sono oggetti diversi.
Sì, se non ci fosse, s2 resterebbe null e ovviamente s1 == s2 darebbe false.
Hai detto due cose che in realtà sono la STESSA cosa. Un reference è valore. Assegnare s1 a s2 significa copiare il valore (il reference) contenuto in s1 nella variabile s2 e quindi alla fine significa che entrambe le variabili faranno riferimento allo STESSO oggetto.
No assolutamente. Se dopo s2 = s1; vai ad assegnare "qualcos'altro" a s2, questo NON cambia nulla in s1 !
Sono comunque variabili distinte.
Riferito alle variabili di istanza, hai l'incapsulamento completo quando nessuna delle variabili è accessibile direttamente dall'esterno. Poi naturalmente servono i metodi "accessori" (getter e/o setter).
Potresti spiegarmi come mai in questo esercizio b1 è uguale a b2?:
codice:
class C {
private Boolean b3 = new Boolean(true);
private Boolean b4;
private String s4 = new String("ab");
private String s5;
void p() {
String s3;
s3 = new String("abcde");
b4 = b3;
s5 = new String("ab");
q(s3, b3, b4);
}
void q(String s2, Boolean b1, Boolean b2){
String s1;
s1 = new String("abcde");
if(s2 == s1) {
System.out.print(1);
} else {
System.out.print(0);
}
if(b1 == b2) {
System.out.print(1);
} else {
System.out.print(0);
}
if(s4 == s5) {
System.out.print(1);
} else {
System.out.print(0);
}
}
}
b1 e b2 hanno entrambi valore true (perchè in p b4=b3) ma essendop tipi non primitvi, il loro confronto con == non dovrebbe restituire 0?