Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Duda respecto a suma de int + char y cast

char caracter = 65;
char segundoCaracter = caracter + ((char)1); //no funciona
segundoCaracter = (char)(caracter + 1); //si funciona

Buen día! Tengo una duda referida al cast de Char: ¿Por qué no funciona cuando hago un cast sobre el int para volverlo char y lo sumo al otro char? Es decir, no entiendo porque no funciona el primer caso pero si que funciona el segundo. Si en el primero, el valor de tipo más pesado (int) tendría que volverse char ¿Por qué no puedo sumar dos carácteres, que se supone que sí se puede hacer? Espero que me puedan ayudar, gracias!

2 respuestas

Hola, entiendo que un char es de la mitad del tamaño de un int, o sea que en un int caben 2 char, un char se puede volver int, pero un int no se puede volver char por que mide el doble:

tipos y tamaños de datos en java

char tamaño = 2 bytes

int tamaño = 4 bytes

por asi decirlo en un int puedes meter 2 char, pero en un chart solo podrias meter medio int (no se puede partir un int), ni castear o convertir un int a un char. (pero si al revés), eso hasta este punto del curso claro.

espero te ayude esta respuesta. Feliz noche.

La respuesta anterior entiendo que es incorrecta, ya que sí se puede hacer cast de un int a char. Lo que sucede en el segundo caso: segundoCaracter = (char)(caracter + 1); es que primero se evalua la suma, y luego se castea a char. Es decir, caracter + 1 = 66 y luego (char) 66 = 'B' Por lo que aquí no habría ningún error. En cambio, en el primer caso: char segundoCaracter = caracter + ((char)1); Primero se evalúa ((char) + 1) que convierte el int '1' al char o caracter número 1 de la tabla ASCII ('☺'). Y luego intenta sumar caracter + '☺'. El problema es que caracter ya no es el número 65, sino que ya es interpretado como el caracter 'A''. Entonces: caracter + '☺' = 'A' + '☺' Pero esto da error, ya que un char es solo un caracter, no se pueden concatenar dos caracteres como sí se puede en el caso de un String. Si funcionaría si en vez de caracter usáramos directamente el número 65, así: char segundoCaracter = 65 + ((char)1);

o incluso int caracter = 65; y luego char segundoCaracter = caracter + ((char)1);

En ambos casos hay que tener en cuenta que, como en matemáticas, siempre se resuelve primero lo que está en paréntesis!

Espero te haya quedado clara la explicación, muchos éxitos!