En muchos lenguajes de programación las comillas simples ' y las comillas dobles " no son lo mismo: indican tipos de datos distintos o comportamientos distintos. Aquí explicamos lo más relevante, con énfasis en Java, y ejemplos prácticos.
1. En Java: ' = char | " = String
En Java la diferencia es de tipo de dato:
- Comillas simples
'x': representan unchar, un único carácter. Ejemplo:'A','3','?'. - Comillas dobles
"texto": representan unString, una cadena de caracteres (puede tener uno o muchos caracteres). Ejemplo:"Hola","M".
Ejemplo con char (comillas simples)
char inicial = 'M';
if (inicial == 'M' || inicial == 'm') {
System.out.println("Empieza por M");
}
Aquí usamos == porque comparamos valores primitivos char.
Ejemplo con String (comillas dobles)
String inicial = "M";
if (inicial.equalsIgnoreCase("m")) {
System.out.println("Empieza por M");
}
Con String no se usa == (no compara contenido), sino métodos como equals() o equalsIgnoreCase().
2. ¿Por qué no usar == con String en Java?
== compara referencias (si dos variables apuntan al mismo objeto), no el contenido. Para comparar texto correctamente se usan:
str1.equals(str2)— compara respetando mayúsculas/minúsculas.str1.equalsIgnoreCase(str2)— compara ignorando mayúsculas/minúsculas.
3. Ejemplo completo leyendo del usuario
import java.util.Scanner;
public class InicialDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Escribe la inicial: ");
String entrada = sc.nextLine(); // entrada es String
if (!entrada.isEmpty() && entrada.substring(0,1).equalsIgnoreCase("m")) {
System.out.println("Tu nombre empieza por M");
} else {
System.out.println("Tu nombre no empieza por M");
}
sc.close();
}
}
En este ejemplo trabajamos con String y usamos equalsIgnoreCase para no preocuparnos por mayúsculas o minúsculas.
4. Otros puntos importantes y errores comunes
- Usar comillas dobles para cadenas vacías:
""es una cadena vacía válida (String). - Comillas simples sólo para un carácter:
'AB'es inválido en Java porque contiene más de un carácter. - Comparar Strings con
==: puede «funcionar» en casos por internamiento de Strings, pero es incorrecto y frágil; usaequals. - Escapar comillas dentro de cadenas: en Java se usa la barra invertida
\:String s = "Ella dijo: \"Hola\""; char ap = '\'';
5. Breve comparación con otros lenguajes
La semántica puede cambiar según el lenguaje:
- JavaScript: tanto
'texto'como"texto"son cadenas (String), y además existe`plantilla ${expr}`(template literals). No haycharseparado. - Python:
'y"son equivalentes parastr. No haycharprimitivo. - C / C++:
'a'es carácter (char), mientras que"texto"es arreglo de caracteres oconst char*(C) /std::string(C++ cuando se construye así).
6. Reglas rápidas (para Java)
| Situación | Usar |
|---|---|
| Un solo carácter | char c = 'x'; |
| Cadena de texto | String s = "texto"; |
| Comparar contenido de Strings | s1.equals(s2) o s1.equalsIgnoreCase(s2) |
| Escapar comillas dentro de String | "Ella dijo: \"Hola\"" |
Conclusión
En Java las comillas simples ' y dobles " tienen roles distintos: ' para char (un carácter) y " para String (cadenas). Saber la diferencia evita errores de tipo y comparaciones incorrectas.