Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Jämföra strängar i Java | Strängar
Introduktion till Java

Jämföra strängar i Java

Svep för att visa menyn

Jämförelse är där Java börjar bete sig lite mer "lågnivå" än förväntat. Det känns självklart att strängar skulle kunna jämföras på samma sätt som tal — med ==. Om två strängar ser identiska ut, varför skulle de då inte vara lika?

Problemet med ==

Om du använder == med strängliteraler verkar det fungera bra till en början:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Båda variablerna pekar på samma objekt i Javas interna strängpool — när samma literal förekommer igen återanvänder Java det befintliga objektet. Därför returnerar == värdet true.

Men nu ändrar vi lite på hur strängarna skapas:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Att använda new String() instruerar Java att skapa ett helt separat objekt varje gång — även om innehållet är identiskt. Eftersom == jämför minnesadresser, inte text, returnerar det false.

Den viktiga regeln: == tittar inte på texten inuti strängen — det kontrollerar om båda variablerna pekar på exakt samma objekt i minnet.

equals() — Jämföra faktiskt innehåll

Om du behöver jämföra den faktiska texten i två strängar, använd .equals(). Den ignorerar minnet helt och fokuserar endast på tecknen:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Även om order1 och order2 är separata objekt i minnet, jämför .equals() deras innehåll och returnerar true.

Skiftlägeskänslighet med equals()

Java är skiftlägeskänsligt, så även en bokstavs skillnad i versaler/gemener gör strängar olika:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" och "latte" behandlas som olika strängar, så resultatet blir false.

equalsIgnoreCase() — Jämförelse utan att bry sig om skiftläge

För att jämföra strängar utan att ta hänsyn till skillnader mellan versaler och gemener, använd .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() behandlar "Latte" och "LATTE" som identiska och returnerar true.

question mark

Vad jämför == när det används med strängar i Java?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 5

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Jämföra strängar i Java

Jämförelse är där Java börjar bete sig lite mer "lågnivå" än förväntat. Det känns självklart att strängar skulle kunna jämföras på samma sätt som tal — med ==. Om två strängar ser identiska ut, varför skulle de då inte vara lika?

Problemet med ==

Om du använder == med strängliteraler verkar det fungera bra till en början:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Båda variablerna pekar på samma objekt i Javas interna strängpool — när samma literal förekommer igen återanvänder Java det befintliga objektet. Därför returnerar == värdet true.

Men nu ändrar vi lite på hur strängarna skapas:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Att använda new String() instruerar Java att skapa ett helt separat objekt varje gång — även om innehållet är identiskt. Eftersom == jämför minnesadresser, inte text, returnerar det false.

Den viktiga regeln: == tittar inte på texten inuti strängen — det kontrollerar om båda variablerna pekar på exakt samma objekt i minnet.

equals() — Jämföra faktiskt innehåll

Om du behöver jämföra den faktiska texten i två strängar, använd .equals(). Den ignorerar minnet helt och fokuserar endast på tecknen:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Även om order1 och order2 är separata objekt i minnet, jämför .equals() deras innehåll och returnerar true.

Skiftlägeskänslighet med equals()

Java är skiftlägeskänsligt, så även en bokstavs skillnad i versaler/gemener gör strängar olika:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" och "latte" behandlas som olika strängar, så resultatet blir false.

equalsIgnoreCase() — Jämförelse utan att bry sig om skiftläge

För att jämföra strängar utan att ta hänsyn till skillnader mellan versaler och gemener, använd .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() behandlar "Latte" och "LATTE" som identiska och returnerar true.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 5
some-alt