Entra

View Full Version : [Java] BufferedReader e readLine()


filipp8
22-05-2008, 18:21
Molto probabilmente sarà che sono stanco, ma mi sto perdendo in un bicchiere d'acqua...


import java.io.*;

public class prova {
public static void main(String[] args) {
String prova = "";
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
try {
prova = inFromUser.readLine();
}
catch (IOException e ) {
e.printStackTrace();
}
System.out.println(prova == "");
}
}


perché se batto un invio, e quindi lascio sostanzialmente vuota la variabile, il System.out.println(prova == "") mi ritorna false?
cioè, mi da false anche se metto una stringa a piacere, cambiando naturalmente anche quella nel confronto...
come posso confrontar la mia variabile prova con qualcos'altro? non riesco a capire!

grazie per 'aiuto!

morskott
22-05-2008, 18:38
Molto probabilmente sarà che sono stanco, ma mi sto perdendo in un bicchiere d'acqua...


import java.io.*;

public class prova {
public static void main(String[] args) {
String prova = "";
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
try {
prova = inFromUser.readLine();
}
catch (IOException e ) {
e.printStackTrace();
}
System.out.println(prova == "");
}
}


perché se batto un invio, e quindi lascio sostanzialmente vuota la variabile, il System.out.println(prova == "") mi ritorna false?
cioè, mi da false anche se metto una stringa a piacere, cambiando naturalmente anche quella nel confronto...
come posso confrontar la mia variabile prova con qualcos'altro? non riesco a capire!

grazie per 'aiuto!

Perchè con l'operatore "==" confronti l'indirizzo di memoria associato alla stringa che ti ritorna da readline e la costante """", che naturalmente la JVM avrà allocato in 2 posizioni di memoria differenti e quindi tornerà sempre false. Per comparare il contenuto "prova.equals("")"

mone.java
22-05-2008, 18:41
Perchè l'operatore == serve a confrontare se due oggetti fanno riferimento alla stessa locazione in memoria, mentre per confrontare il contenuto di due oggetti si usa il metodo .equals().
Quindi devi fare così :
System.out.println(prova.equals(""));

filipp8
22-05-2008, 18:52
illuminante, grazie mille!
:muro: