2014-10-10 11 views
9

Voglio confrontare due stringhe in scala. per esempio,Come confrontare due stringhe in scala?

le mie corde sono:

scala java 
scala java c++ 
scala c++ 

voglio mettere a confronto la stringa

"Scala C++" con ogni stringhe

risultati dovrebbero essere,

scala c++ = scala java // false 
scala c++ = scala java c++ // false 
scala c++ = scala c++ // true 
+2

E quale sarebbe un esempio che restituisce vero? –

+2

Perché l'ultimo test dovrebbe restituire 'false'? –

risposta

21

In Scala è possibile utilizzare == dell'uguaglianza

scala> "scala c++" == "scala java" 
res0: Boolean = false 
scala> "scala c++" == "scala java c++" 
res1: Boolean = false 
scala> "scala c++" == "scala c++" 
res2: Boolean = true 

Procedimento == è definito nella classe AnyRef. Poiché i metodi prima verificano i valori nulli e quindi chiamano il metodo equals sul primo oggetto per vedere se i due oggetti sono uguali, non è necessario eseguire un controllo Null speciale;

"test" == null 
res0: Boolean = false 

Vedere il Scala getting started guide e strings

Da "An Overview of the Scala Programming Language Second Edition";

"L'operazione uguaglianza == tra i valori è progettato per essere trasparente rispetto alla rappresentazione del tipo. Per valore tipi, è l'uguaglianza (numerico o booleano) naturale. Per riferimento tipi, == viene trattato come alias del uguale metodo dal java.lang.Object. Tale metodo è originariamente definito come riferimento uguaglianza, ma è destinato a essere sostituiti nelle sottoclassi di attuazione del nozione naturale di uguaglianza per queste sottoclassi. Ad esempio, le versioni in box dei tipi di valore implementano un metodo equals il quale confronta i valori in box. Al contrario, in Java, == indica sempre l'uguaglianza di riferimento sui tipi di riferimento. Anche se questo è un po 'più efficace da implementare, introduce anche un serio problema di coerenza perché versioni in scatola di valori uguali potrebbero non essere più uguali a rispetto a ==. Alcune situazioni richiedono l'uguaglianza di riferimento anziché l'uguaglianza utente-dened . Un esempio è hash-consing, dove eciency è paramount. Per questi casi, classe AnyRef definisce un ulteriore metodo eq , che non può essere ignorato, ed è implementata come riferimento uguaglianza (cioè, si comporta come == in Java per i tipi di riferimento)."

+0

Questa raffinatezza unica toglie tanto dolore 'java'! – dmitry

0

a differenza di Java, Scala usa corde perfettamente immutabili. Come Olius sottolinea,

stringhe sono immutabili in Java e Scala.Scala utilizza le stringhe Java, ma le avvolge con StringOps o WrappedString. "final" in Java è sostanzialmente uguale a "val" in Scala. In Scala, il metodo == è definito in AnyRef.

Quindi, in Scala verrà utilizzato l'operatore == per confrontare due stringhe.

Per esempio bisogna stringhe string1 e la stringa 2 si può solo fare

string1 == string2 //=> true/false 

Cosa si potrebbe desiderare di ricordare è che se il valore della stringa non viene memorizzato in un val e ti piace semplicemente per confrontare il due, dovresti usare le doppie virgolette per incapsulare i valori delle stringhe.

Ad esempio:

"hello" == "hello" //=> true 
"hello" == "bye" //=> false 
+3

Le stringhe sono immutabili in Java e Scala. Scala utilizza le stringhe Java, ma le include con StringOps o WrappedString. "final" in Java è sostanzialmente lo stesso di "val" in Scala. In Scala, il metodo == è definito in AnyRef. – oluies

+0

@Oluies, giusto. Grazie per la segnalazione. Aggiornerò la risposta –

+0

Cosa intendi con "** A differenza di Java **, Scala utilizza stringhe perfettamente immutabili"? Anche le stringhe in Java sono immutabili. – MondKin