Oppure

Loading
11/02/13 12:59
Archer312
Salve a tutti, mi stavo chiedendo perché questo ciclo infinito viene interrotto soltanto con gli interi e non con le stringhe?
Mi spiego meglio.
all'input di 10 il ciclo verrà terminato regolarmente.
import java.util.Scanner;

public class NomeClasse
{
	public static void main(String args[])
	{
		Scanner input = new Scanner( System.in );
		int k=0;
		for ( ; ; )
		{
			if (k == 10) break;
			k = input.nextInt();
		}

	}
}


Ma se io volessi farlo con le stringhe?
Allora io ho pensato di strutturarlo in questo modo:
import java.util.Scanner;

public class NomeClasse
{
	public static void main(String args[])
	{
		Scanner input = new Scanner( System.in );
		String stringa = "";
		for ( ; ; )
		{
			if (stringa == "stop") break;
			stringa = input.nextLine();
		}

	}
}

Ma con mia grande sorpresa non ho ottenuto il risultato aspettato.
Anche se scrivo ripetutamente "stop" il cliclo andrà comunque in loop.
Potreste spiegarmi il motivo?
Ultima modifica effettuata da Archer312 11/02/13 13:00
aaa
11/02/13 13:45
TheKaneB
usa
if (stringa.equals("stop";))

:k:
Ultima modifica effettuata da TheKaneB 11/02/13 13:46
aaa
11/02/13 16:07
Archer312
Postato originariamente da TheKaneB:

usa
if (stringa.equals("stop";))

:k:

Scusami ma vorrei capire perché non va, non avere già un codice :P.
Come mai con gli interi si e con le stringhe no?
aaa
11/02/13 16:35
TheKaneB
La risposta è molto semplice:

In Java esistono due grandi categorie di variabili: tipi primitivi e tipi composti / oggetti.

Il confronto con l'operatore == sui tipi primitivi si comporta esattamente come ti aspetteresti.
Con i tipi composti, invece, l'operatore di uguaglianza confronta le istanze (i puntatori) e non il contenuto dell'oggetto.

Nel caso delle stringhe puoi avere stringhe distinte che risiedono in posizioni diverse in memoria, e quindi sono istanze diverse, ma hanno uguale contenuto. Il modo corretto per confrontare il contenuto di due oggetti è quindi l'uso del metodo equals() che è un metodo comune a tutti gli oggetti, perchè deriva dalla classe base Object.

aaa
11/02/13 17:52
Archer312
Grandissimo! :k:
Ora è tutto chiaro! :)
aaa