Forum Informatica Unict

Area Studenti => L'angolo del tecnico => Topic started by: turì on 23-11-2012, 13:07:21



Title: esercizio java problema if
Post by: turì on 23-11-2012, 13:07:21
salve colleghi, volevo una mano perché non riesco a capire cosa c'è che non va nel codice.
ho 2 classi, una BranoDigitale dove è implementata la classe con i suoi metodi, l'altra ClienteBranoDigitale dove è implementato il metodo main per verificarne la correttezza. vi posto il codice di entrambe le classi

BranoDigitale
Code:
public class BranoDigitale {

private String titolo;

private String autore;

private String formato;


BranoDigitale(String titolo, String autore) {

this.titolo=titolo;
this.autore=autore;
this.formato=null;

}

BranoDigitale(String titolo, String autore, String formato) {

this.titolo=titolo;
this.autore=autore;
this.formato=formato;

}

public String getAutore() {

return this.autore;

}

public String getTitolo() {

return this.titolo;

}

public String getFormato() {

return this.formato;

}

public void setFormato(String formato) {

this.formato=formato;

}

public boolean Uguale(BranoDigitale b) {

boolean ver=false;

if((this.getTitolo() == b.getTitolo()) &&
(this.getAutore() == b.getAutore()) &&
(this.getFormato() == b.getFormato())) {

ver=true;

}
else {

ver=false;

}

return ver;

}

}

ClienteBranoDigitale
Code:
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import javax.swing.JOptionPane;

public class ClienteBranoDigitale{

public static void stampaBranoDigitale(BranoDigitale bd){

System.out.println("Titolo = "+ bd.getTitolo() + " Autore = " + bd.getAutore() + " Formato = " + bd.getFormato());

}

public static void main(String[] args){

InputStreamReader reader=new InputStreamReader(System.in);

BufferedReader input=new BufferedReader(reader);

String[] str=new String[6];
int i=0;

try {

for(i=0;i<6;i++) {

str[i]=input.readLine();

}

}
catch (IOException e) {

System.out.println("errore "+e);
System.exit(-1);

}

BranoDigitale bd1 = new BranoDigitale(str[0],str[1],str[2]);
BranoDigitale bd2 = new BranoDigitale(str[3],str[4],str[5]);

stampaBranoDigitale(bd1);
stampaBranoDigitale(bd2);

System.out.println(bd1.Uguale(bd2));
System.out.println(bd2.Uguale(bd1));
}

}

il problema è che nel metodo Uguali della classe BranoDigitale non entra mai nell'if, anche se io do come input stesso titolo, autore e formato per entrambi gli oggetti che istanzio nel main. cosa può essere?


Title: Re:esercizio java problema if
Post by: turì on 25-11-2012, 12:37:00
up

edit: invece di usare nell'if l'operatore == ho usato il metodo str1.equals(str2) e adesso funziona.
mi domando: come mai funziona in un metodo e non nell'altro? è sbagliato usare l'operatore == con le stringhe?


Title: Re:esercizio java problema if
Post by: LtWorf on 26-11-2012, 10:54:46
Nel caso di stringhe (o qualsiasi altro tipo di oggetto), le variabili rappresentano puntatori, quindi l'operatore == compara l'indirizzo dell'oggetto e non l'oggetto stesso. Quindi ti da vero solo se compari lo stesso oggetto, ma non due oggetti identici.


Title: Re:esercizio java problema if
Post by: turì on 26-11-2012, 14:05:27
grazie mille per la puntualizzazione!


Title: Re:esercizio java problema if
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 26-11-2012, 15:03:35
Nel caso di stringhe (o qualsiasi altro tipo di oggetto), le variabili rappresentano puntatori [...]
Per l'esattezza, sono chiamati reference (riferimenti) .coolio, ma ci siamo capiti :pray.