Buon giorno vorrei un piccolo chiarimento su una situazione che mi sono trovato ad affrontare.
Mi sto esercitando in java, quindi verso questo linguaggio di programmazione sto muovendo i primi passi. Ho scritto questo codice.
codice:
import java.io.*;
class infosistema
{
public static void main(String[] argomenti)
{
System.out.println("Richiedi la specifica che preferisci e premi [INVIO]. \nPer uscire dal programma scrivi 'end'"); //stampa istruzioni
// in 'a' prendiamo il flusso di standard input
InputStreamReader a = new InputStreamReader(System.in);
// sfruttiamo un BufferedReader per contenere il flusso
// di byte
BufferedReader IN = new BufferedReader(a);
// e convertirlo in una stringa
String s = new String();
String tipo = new String();
String tmp = new String();
// finché non si verifica la condizione di uscita
while(s.compareTo("end")!=0)
{
try {
s= IN.readLine(); // Legge il contenuto della riga
} catch (IOException e) {
s="ERRORE DI LETTURA";
};
// String tipo;
// String tmp;
// e lo stampa
switch (s)
{
case "sistema operativo":
tipo="Sistema Operativo: ";
tmp=System.getProperty("os.name");
break;
}
System.out.println(tipo+tmp);
}
}
}
Come potete vedere nella parte finale del codice ho inserito la dichiarazione delle stringhe tmp e tipo senza dichiararle new String(). Perché se le dichiaro new string(); funzionano e se dichiaro semplicemente String tmp mi risultano come errore ovvero non inizializzate?
La seconda forma necessita di una inizializzazione in fase di definizione per poter essere considerata funzionante?