Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Perché questa struttura funziona solo con gli interi?
Forum - Java - Perché questa struttura funziona solo con gli interi?

Avatar
Archer312 (Normal User)
Rookie


Messaggi: 32
Iscritto: 30/06/2012

Segnala al moderatore
Postato alle 13:59
Lunedì, 11/02/2013
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.
Codice sorgente - presumibilmente Java

  1. import java.util.Scanner;
  2.  
  3. public class NomeClasse
  4. {
  5.         public static void main(String args[])
  6.         {
  7.                 Scanner input = new Scanner( System.in );
  8.                 int k=0;
  9.                 for ( ; ; )
  10.                 {
  11.                         if (k == 10) break;
  12.                         k = input.nextInt();
  13.                 }
  14.  
  15.         }
  16. }



Ma se io volessi farlo con le stringhe?
Allora io ho pensato di strutturarlo in questo modo:
Codice sorgente - presumibilmente Java

  1. import java.util.Scanner;
  2.  
  3. public class NomeClasse
  4. {
  5.         public static void main(String args[])
  6.         {
  7.                 Scanner input = new Scanner( System.in );
  8.                 String stringa = "";
  9.                 for ( ; ; )
  10.                 {
  11.                         if (stringa == "stop") break;
  12.                         stringa = input.nextLine();
  13.                 }
  14.  
  15.         }
  16. }


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 il 11/02/2013 alle 14:00
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:45
Lunedì, 11/02/2013
usa
if (stringa.equals("stop"))

:k:

Ultima modifica effettuata da TheKaneB il 11/02/2013 alle 14:46
PM Quote
Avatar
Archer312 (Normal User)
Rookie


Messaggi: 32
Iscritto: 30/06/2012

Segnala al moderatore
Postato alle 17:07
Lunedì, 11/02/2013
Testo quotato

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?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:35
Lunedì, 11/02/2013
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.


PM Quote
Avatar
Archer312 (Normal User)
Rookie


Messaggi: 32
Iscritto: 30/06/2012

Segnala al moderatore
Postato alle 18:52
Lunedì, 11/02/2013
Grandissimo! :k:
Ora è tutto chiaro! :)

PM Quote