Confronta le stringhe in Java

K. Macharia 12 ottobre 2023
  1. Confronta le stringhe in Java usando il metodo compareTo()
  2. Il metodo dell’operatore di uguaglianza ==
  3. Il metodo equals()
  4. Sensibilità tra maiuscole e minuscole del metodo equals()
  5. Il metodo contentEquals()
Confronta le stringhe in Java

Quasi tutti gli sviluppatori Java ad un certo punto dovranno confrontare due stringhe per completare la logica di un’applicazione. Una variabile stringa è una raccolta di caratteri. Per comprendere le operazioni di confronto possibili con una stringa, dobbiamo prima comprendere le proprietà di una stringa.

  1. Le stringhe non sono modificabili. Significa che non possono crescere e qualsiasi modifica a una stringa porta alla formazione di una nuova stringa. Questo perché sono supportati internamente da array di caratteri immutabili.
  2. Ogni volta che diciamo che viene creata una stringa, vengono creati due oggetti posti in diverse aree di memoria. Uno viene creato nell’area heap, mentre il secondo viene creato nel pool di costanti String. Il riferimento della stringa punta la macchina verso l’oggetto dell’area di heap.

Per esempio,

String mystring = "World"

In questo caso, mystring punta all’area dell’heap in cui è memorizzata la stringa World.

Di seguito sono riportati i quattro metodi utilizzati per confrontare le stringhe in java e sono spiegati in dettaglio in questo articolo:

  1. Il metodo compareTo()
  2. L’operatore di uguaglianza ==
  3. Il metodo equals()
  4. Il metodo contentEquals()

Confronta le stringhe in Java usando il metodo compareTo()

Confronta lessicograficamente due stringhe. Funziona assegnando prima a ciascun carattere nella stringa un valore Unicode e quindi confrontando le stringhe. Questo processo restituisce il risultato come zero, un numero positivo o un numero negativo.

  1. Il risultato è zero quando le due stringhe confrontate sono lessicograficamente uguali.
  2. Il risultato è positivo se la prima stringa è più grande della seconda.
  3. Il risultato è negativo quando la seconda stringa è più grande della prima stringa.

Ci sono due modi per usare il metodo compareTo().

Confronta due stringhe letterali

Confrontiamo stringa1 e stringa2. Il risultato che otteniamo dal confronto di queste due stringhe è di tipo int. Esempio:

public class CompareToCode {
  public static void main(String args[]) {
    String string1 = "now";
    String string2 = "now";
    int result = string1.compareTo(string2);
    System.out.println(result);
  }
}

Produzione:

0

Confronta una stringa e un oggetto

Il metodo compareTo() consente anche il confronto di oggetti non referenziati con una stringa. Esempio:

public class CompareTo {
  public static void main(String args[]) {
    String string1 = "now";
    int result = string1.compareTo("now");
    System.out.println(result);
  }
}

Produzione:

0

compareTo() Maiuscole / minuscole

Il metodo compareTo() distingue tra maiuscole e minuscole. Ciò significa che anche se due stringhe sono uguali, le mostrerà come diverse se non sono uniformi. Esempio:

public class CompareTo {
  public static void main(String args[]) {
    String string1 = "hello";
    String string2 = "HELLO";
    int result = string1.compareTo(string2);
    System.out.println(result);
  }
}

Produzione:

-32

I mondi hello e HELLO sono gestiti in modo diverso da quanto sopra, e quindi otteniamo un risultato di -32.

Tuttavia, un altro metodo in questa classe di stringhe ignora la distinzione tra maiuscole e minuscole - compareToIgnoreCase(). Esempio:

public class CompareToIgnoreCase {
  public static void main(String args[]) {
    String string1 = "hello";
    String string2 = "HELLO";
    int result = string1.compareToIgnoreCase(string2);
    System.out.println(result);
  }
}

Produzione:

0

Il metodo dell’operatore di uguaglianza ==

È un metodo di confronto di stringhe java che confronta se due oggetti si trovano nella stessa posizione di memoria. Esempio:

public class EqualityOperator {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("Wow");
    System.out.println(oneS == twoS);
  }
}

Produzione:

false

L’operatore == confronta uno e due oggetti per verificare se sono uguali. Entrambe le stringhe, oneS e twoS sono riferimenti diversi e quindi restituiscono false. oneS e twoS sono due oggetti diversi. Tuttavia, entrambi hanno lo stesso valore in loro.

Il metodo equals()

Questo è un metodo utilizzato per confrontare due stringhe in java in base al loro valore. L’output di questo metodo è vero o falso. Se le stringhe confrontate non sono uguali in base al valore, il metodo restituisce false. Se le stringhe confrontate sono uguali, il metodo restituisce true. Per esempio,

public class Equals {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("Wow");
    System.out.println(oneS.equals(twoS));
  }
}

Produzione:

true

Sensibilità tra maiuscole e minuscole del metodo equals()

Il metodo equals() distingue tra maiuscole e minuscole e quindi vede le stesse parole limitate in modo diverso come parole diverse. Per esempio:

public class Equals {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("WOW");
    System.out.println(oneS.equals(twoS));
  }
}

Produzione:

false

Nel caso precedente, wow rispetto a WOW utilizzando il metodo equals() restituisce false.

Tuttavia, se vuoi usare il metodo equals() e non considerare la distinzione tra maiuscole e minuscole, usa il metodo equalsToIgnoreCase(). Per l’esempio precedente, equalsIgnoreCase() restituirà true.

public class EqualsIgnorecase {
  public static void main(String args[]) {
    String oneS = new String("Wow");
    String twoS = new String("WOW");
    System.out.println(oneS.equalsIgnoreCase(twoS));
  }
}

Produzione:

true

Il metodo contentEquals()

Questo è anche un metodo di confronto di stringhe java che confronta un buffer e una stringa di stringhe e restituisce false o true. Se la stringa corrisponde al buffer della stringa con cui viene confrontata, il metodo restituisce true. Se la stringa non corrisponde al buffer della stringa con cui viene confrontata, il metodo restituisce false.

Esempio:

public class ContentEquals {
  public static void main(String args[]) {
    String firstS = new String("Here we are");
    StringBuffer secondS = new StringBuffer("Here we are");
    System.out.println(firstS.contentEquals(secondS));
  }
}

Produzione:

true

Articolo correlato - Java String