Comparando Strings em Java
Deslize para mostrar o menu
A comparação é onde o Java começa a se comportar de maneira um pouco mais "baixo nível" do que o esperado. Parece óbvio que strings poderiam ser comparadas da mesma forma que números — usando ==. Afinal, se duas strings parecem idênticas, por que não seriam iguais?
O Problema com ==
Se você usar == com literais de string, parece funcionar bem a princípio:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }
Ambas as variáveis apontam para o mesmo objeto no string pool interno do Java — quando o mesmo literal aparece novamente, o Java reutiliza o existente. Portanto, == retorna true.
Agora, vamos alterar um pouco a forma como as strings são criadas:
Main.java
1234567891011package 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); } }
Usar new String() instrui o Java a criar um objeto completamente separado a cada vez — mesmo que o conteúdo seja idêntico. Como == compara endereços de memória, e não o texto, ele retorna false.
Regra principal: == não verifica o texto dentro da string — ele checa se ambas as variáveis apontam para o exato mesmo objeto na memória.
equals() — Comparação do Conteúdo Real
Para comparar o texto real dentro de duas strings, utilize .equals(). Esse método ignora completamente a memória e foca apenas nos caracteres:
Main.java
1234567891011package 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)); } }
Mesmo que order1 e order2 sejam objetos separados na memória, .equals() compara seu conteúdo e retorna true.
Sensibilidade a maiúsculas e minúsculas com equals()
Java diferencia maiúsculas de minúsculas, portanto, até mesmo uma letra com diferença de caixa torna as strings diferentes:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }
"Latte" e "latte" são consideradas strings diferentes, portanto o resultado é false.
equalsIgnoreCase() — Comparação Sem Considerar Maiúsculas ou Minúsculas
Para comparar strings ignorando diferenças entre letras maiúsculas e minúsculas, utilize .equalsIgnoreCase():
Main.java
12345678910package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }
.equalsIgnoreCase() considera "Latte" e "LATTE" como idênticos e retorna true.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Comparando Strings em Java
A comparação é onde o Java começa a se comportar de maneira um pouco mais "baixo nível" do que o esperado. Parece óbvio que strings poderiam ser comparadas da mesma forma que números — usando ==. Afinal, se duas strings parecem idênticas, por que não seriam iguais?
O Problema com ==
Se você usar == com literais de string, parece funcionar bem a princípio:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }
Ambas as variáveis apontam para o mesmo objeto no string pool interno do Java — quando o mesmo literal aparece novamente, o Java reutiliza o existente. Portanto, == retorna true.
Agora, vamos alterar um pouco a forma como as strings são criadas:
Main.java
1234567891011package 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); } }
Usar new String() instrui o Java a criar um objeto completamente separado a cada vez — mesmo que o conteúdo seja idêntico. Como == compara endereços de memória, e não o texto, ele retorna false.
Regra principal: == não verifica o texto dentro da string — ele checa se ambas as variáveis apontam para o exato mesmo objeto na memória.
equals() — Comparação do Conteúdo Real
Para comparar o texto real dentro de duas strings, utilize .equals(). Esse método ignora completamente a memória e foca apenas nos caracteres:
Main.java
1234567891011package 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)); } }
Mesmo que order1 e order2 sejam objetos separados na memória, .equals() compara seu conteúdo e retorna true.
Sensibilidade a maiúsculas e minúsculas com equals()
Java diferencia maiúsculas de minúsculas, portanto, até mesmo uma letra com diferença de caixa torna as strings diferentes:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }
"Latte" e "latte" são consideradas strings diferentes, portanto o resultado é false.
equalsIgnoreCase() — Comparação Sem Considerar Maiúsculas ou Minúsculas
Para comparar strings ignorando diferenças entre letras maiúsculas e minúsculas, utilize .equalsIgnoreCase():
Main.java
12345678910package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }
.equalsIgnoreCase() considera "Latte" e "LATTE" como idênticos e retorna true.
Obrigado pelo seu feedback!