while studio solucion reached error end compiler java

java - studio - ¿Por qué la nueva cadena("") se compila mientras que char c='''' no lo hace?



java compiler error android studio (13)

¿Por qué son válidas las cadenas vacías y los caracteres vacíos no lo son? Habría pensado que una Cadena vacía no es una cadena sino solo un marcador de posición. Lo mismo para un char, pero crear un char vacío ni siquiera se compila.

Lo que me pregunto es por qué ocurre lo siguiente - Compila -

String s = "";

No compila

char c = '''';


Creo que deberías intentar saber la diferencia entre caracteres / cadenas en blanco y caracteres / cadenas en blanco. el carácter / cadena en blanco se refiere al carácter / cadena que tiene algún contenido, como '''' (SPACE), ''/ t'' y así sucesivamente, mientras que los vacíos no tienen ningún contenido y se pueden ver como un contenedor vacío.


Debido a que un literal de cadena representa una cadena que puede constar de cero o más caracteres, pero un literal de carácter (válido) representa exactamente un carácter.

Un char podría definirse como un tipo de datos que puede almacenar 0 o 1 caracteres ...

Sí. En teoría podría haberse definido de esa manera. Pero confíe en mí, si analiza todos los problemas (p. Ej., Cómo representaría a un personaje en blanco, cómo lo manejaría una aplicación, etc.) concluirá que existen pocos beneficios y desventajas significativas.

De todos modos, hacer esto simplemente para que haya una consistencia sintáctica entre los literales de cadenas y caracteres sería totalmente loco. No rompes el rendimiento y / o la semántica de un idioma para que la sintaxis se vea bien.

Un comentario sobre la respuesta aceptada propone que '''' debería significar lo mismo que ''/0'' . Pero el argumento contrario a esto es que ''/0'' no significa que no haya caracteres. Significa un personaje cuyo valor es cero. Entonces, si '''' realidad significa un carácter, es engañoso. Y como ya hay una forma de denotar esto ... ''/0'' ... una segunda forma de denotarlo es redundante.

Si alguna parte de la nueva sintaxis de lenguaje es a la vez engañosa y redundante, es difícil justificar que se agregue.

En respuesta al comentario de SoloBold, si bien sería posible definir un tipo de carácter para hacerlo, requeriría más espacio. Al menos 1 bit, y más probablemente 16 bits para evitar problemas de alineación de memoria incómodos. Un tipo de char 32 bits no sería aceptable ... aunque resuelva otros problemas.


Matemáticamente, un alfabeto A es un conjunto de símbolos, suponga que el alfabeto A = {a, b, c, d, ..., z}. Una cadena L es una secuencia de cero o más caracteres de un alfabeto, es decir, L = A *. Una cadena vacía es simplemente una secuencia de cero caracteres; mientras que un "caracteres vacíos" no es un miembro del alfabeto.

No puedes tener un carácter vacío, es ilógico.


Podrías ver una cadena como una secuencia de caracteres. Tener una secuencia vacía sin caracteres tiene sentido, tener un personaje que no sea un personaje no lo tiene.

Tampoco utilice String s = new String(""); , solo String s = "" es suficiente.


Por cierto, puede usar la envoltura de objeto para el tipo de char primitivo:

Character c = null; Character c2 = ''a'';

Esto puede ser útil cuando desea que un campo sea "un carácter o nada".


Porque char representa un solo carácter, lo que '''' no lo es. Una cadena puede contener cero o más caracteres, pero un carácter no puede ser más que un solo carácter.


Probablemente porque char es un tipo primitivo, y String es un objeto. boolean, int etc. tampoco permiten valores "vacíos".


String es un conjunto de caracteres que pueden ser 0 o más. así que las cadenas vacías son válidas, que no tienen ningún carácter. BUt char representa el tipo primitivo de carácter que debe ser un carácter válido, que '''' no lo es.


Un carácter es un solo carácter, es decir, una letra, un dígito, un signo de puntuación, una pestaña, un espacio o algo similar.


Una cadena vacía es como un contenedor que no contiene nada. Un char debe tener un valor y sin exactamente un carácter no hay de dónde derivar ese valor.


char es un tipo primitivo, por lo que necesita dar un valor (cualquiera que sea). Si desea dejar su variable como "indefinido", puede usar el objeto contenedor:

Character c = null;

De esta manera, la variable c no contiene (todavía) ningún valor. ¡Pero entonces asegúrese de agregar un valor! :)


"" es un conjunto de caracteres vacío.

'''' simplemente no es un personaje.


String s = null; // OK String s = new String(""); // OK String s = new String("A"); // OK String s = new String("ABC"); // OK char c = ''A''; // OK char c = ''''; // NOT OK! Character c = null; // OK Character c = new Character(''A''); // OK Character c = new Character(''''); // NOT OK!