Mi opinión fue, hasta hoy, que un literal como "c"
crea un objeto String
. Hoy escuché que Java no está creando un objeto para cadenas de caracteres individuales. ¿Es esto correcto? ¿Almacena ese literal como char
?Cadena de un solo carácter
Respuesta
es String
literal. Representa un String
al igual que "foo"
representa un String
.
No existe un tratamiento especial de literales de un solo carácter String
(ni siquiera del 0-letter String
literal ""
).
Quienquiera que le haya dicho que se trata de manera diferente, fue a) equivocado o b.) Hablando de algo diferente (una biblioteca que tiene un tratamiento especial, por ejemplo).
"c"
creará una cadena. 'c'
creará un char
No, está mal. Incluso ""
, crea un objeto String
. Sin embargo, si escribe 'c'
, tiene un objeto char y no String
.
Java crea una instancia de una cadena incluso para una cadena de caracteres única. Las siguientes impresiones: java.lang.String
public class Test{
public static void main(final String[] args){
System.out.println("c".getClass().getName());
}
}
Sí, obviamente, devuelve cadena porque '" "' (comillas dobles) es para cadenas y '''' (comillas simples) es para caracteres – Woot4Moo
"c"
sí crea un objeto. Sin embargo, si asigna el literal nuevamente en algún lugar del código fuente, no creará un nuevo objeto, sino que hará referencia al primer objeto de cadena creado.
Por ejemplo:
String s1 = "abc"; //creates the String object
String s2 = "abc"; //references the same object as s1
Tanto S1 y S2 están asignados al mismo objeto, y == funcionaría.
Puede leer más aquí: http://javatechniques.com/blog/string-equality-and-interning/
Incorrecto. == solo funcionaría si usaras String.intern – Woot4Moo
@ Woot4Moo no, eso es cierto. Las cadenas literales son internalizadas por defecto. – sfussenegger
@ Woot4Moo see https://gist.github.com/1044768 – sfussenegger
Tal vez lo que quería decir era que se crean el debajo de la capucha flyweights (¡no sé cómo funciona esto con Java, pero suponen que este concepto se employeed en algún nivel para cuerdas)
que es cierto para algunas operaciones, a saber, subcadena (..), subSecuencia (..) y recorte(), donde la Cadena resultante usará el mismo carácter [] debajo del capó. Sin embargo, no veo cómo esto podría afectar los literales de cadenas. – sfussenegger
String
almacena los caracteres como un char[]
, lo que muy probablemente "c"
se representarán como new char[] { 'c' }
dentro del objeto String
.
Dado que la clase String
es final
, significa que no hay una subclase que almacene cadenas de un solo carácter en un campo char c
.
Además, no existe el concepto de auto-boxing/unboxing para un solo carácter String
a char
- por lo que se documenta, por lo que es seguro asumir Cuerdas de un solo carácter se almacenan similar a cualquier otro tipo de de String.
Como con la mayoría de las cosas en la programación, busque en la fuente -> java.lang.String.
Todas las cadenas son instancias de java.lang.String no hay ningún caso especial. Cada java.lang.String incluye un char [] y algunos enteros para contener los índices de inicio y fin.Tenga en cuenta que el carácter char [] se comparte entre las instancias de Strign, como cuando se hace String.substring(), el carácter original [] no se clona o se copia, sino que se actualizan los índices de inicio/finalización.
- 1. Eliminar un solo carácter de una cadena?
- 2. ¿Convierte un solo carácter en una cadena?
- 3. impulso dividido con un solo carácter o solo una cadena
- 4. Importar archivo de texto como cadena de un solo carácter
- 5. Convertir un solo carácter en Cadena en minúscula
- 6. ¿Cómo modifico un solo carácter en una cadena, en Python?
- 7. Cadena: cómo reemplazar múltiples caracteres posibles con un solo carácter?
- 8. ¿Es posible obtener solo el primer carácter de una Cadena?
- 9. Eliminar un carácter de una cadena
- 10. Cómo obtener un solo carácter NSString de un NSString
- 11. Reemplazar solo la enésima instancia del carácter
- 12. ¿Cómo reemplazar un solo carácter dentro de una cadena en Golang?
- 13. C# añadiendo un carácter en una cadena
- 14. Separar una cadena por un carácter
- 15. Accediendo a un carácter en una cadena
- 16. ¿Cuántos bytes usa Oracle al almacenar un solo carácter?
- 17. Dividir una cadena en una cadena, no un carácter
- 18. Entrada de consola de un solo carácter en java/clojure
- 19. Ruby: carácter de ASCII de una cadena
- 20. comprobar si un solo carácter es un espacio en blanco?
- 21. cómo leer solo un carácter en el script de shell
- 22. Encontrar ocurrencias de un carácter en una cadena con Ruby
- 23. Eliminar el primer carácter de una cadena
- 24. ¿Cómo reemplazar un carácter de una cadena en SQL?
- 25. Recuento de ocurrencias de un carácter en una cadena
- 26. Número de apariciones de un carácter en una cadena
- 27. Retire parte de una cadena después de un cierto carácter
- 28. Eliminar cadena después de la última aparición de un carácter
- 29. Reemplazar un carácter con una cadena en LaTeX
- 30. eliminar solo un carácter cuando la región está resaltada
¿Has oído hablar? ¿Has oído dónde? – bmargulies
Este sería un concepto interesante de auto-boxing/unboxing de un solo carácter Cadena a un 'char' ... – Nick
Dile a la persona que te dijo que lea la parte sobre los literales en la Especificación del lenguaje Java. Literales de personajes y literales de cadenas: http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100960 –