java

Páginas: 13 (3105 palabras) Publicado: 13 de marzo de 2014
asting o transformaciones de tipo
El casting es un procedimiento para transformar una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas (este último casting es el más importante y se verá más adelante).
Dentro del casting de variables primitivas se distinguen dos clases:
• Implícito: no se necesitaescribir código para que se lleve a cabo. Ocurre cuando se realiza una conversión ancha (widening casting), es decir, cuando se coloca un valor pequeño en un contenedor grande.
Ejemplo 1:

Ejemplo 2: similar al anterior.

En cambio,

• Explícito: sí es necesario escribir código. Ocurre cuando se realiza una conversión estrecha (narrowing casting), es decir, cuando se coloca un valorgrande en un contenedor pequeño. Son susceptibles de pérdida de datos.
Ejemplo 1:

NOTA: si se sustituyera la primera línea int num1=100 por int num1=1000000, el código compilaría bien, pero habría pérdida de datos, pues el 1000000 se sale del rango de short [-32768, 32767]. Al mostrar por consola el valor se obtendría un resultado incongruente.
Ejemplo 2:

Ejemplo 3: continuación del Ejemplo2 del casting implícito
Para que la línea

compile debe hacerse un casting explícito a long

pero no

porque, en la línea anterior, 10000000000 es considerado int, mientras que en las de arriba, double.
Dicho esto, se va a analizar un ejemplo un tanto extraño.
Ejemplo extraño:

Dado que cualquier entero, por defecto, se almacena en un int (4 bytes), con la línea anterior sepretende colocar un valor grande (el int 10) en un contenedor pequeño (una primitiva de tipo byte con capacidad para 1 byte). Esto, según lo expuesto anteriormente, precisa de casting explícito.

Pero, resulta que no hace falta, ya que el compilador, cuando se trabaja con enteros, digamos que, provoca un "casting implícito contranatura" y transforma automáticamente a byte el int 10. Ocurriría lo mismosi se trabajara con short y char.
Lo que pasa (y esto es lo que resulta un tanto extraño) es que no ocurre lo anterior con los decimales: por eso, una línea como

provoca error de compilación. Recordar que cualquier decimal, por defecto, se almacena en un double (8 bytes) y que un tipo float tiene capacidad para 4 bytes. En los decimales, el compilador no fuerza el casting implícitocontranatura. De ahí que sea necesario un casting explícito a float para evitar el fallo de compilación.
NOTA: quizá se evitarían estas situaciones, si el compilador no forzara el casting implícito contranatura a byte, short o char de un int y provocara error de compilación, del mismo modo que cuando se declara un float y no se castea explícitamente. Pero, de momento, esto es lo que hay.
Código departida para explicar el casting entre variables primitivas que almacenan datos numéricos:

Las líneas 3 y 4 almacenan al número 10 mediante una variable primitiva de tipo byte vía "casting implícito contranatura", el 3000 mediante una de tipo short, también vía "casting implícito contranatura". Lo más intuitivo es definirlas mediante un casting explícito, pero tal y como están también se puede.Supuestamente, la línea 5, almacena el 3000000000 mediante una variable de tipo long, vía casting implícito, pero es falso. Ocurre lo que se ha comentado en el Ejemplo 2 del casting implícito: 3000000000 no es considerado como long sino como int y 3000 millones no pertenece al rango asociado a int (aprox. [-2150 millones, 2150 millones]). Si se intenta compilar, se produciría error.
Supuestamente,la línea 6, almacena el 256.5 mediante una variable de tipo float (ocupa 4 bytes en memoria), vía "casting implícito contranatura", pero, como se ha comentado en el Ejemplo extraño, es falso, ya que en decimales nunca se produce. Debe castearse explícitamente a float.
El código correcto sería:

Código fuente

• Una cuestión a tener en cuenta relacionada con el casting entre variables...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Java
  • Java
  • java
  • JAVA
  • java
  • java
  • javiera
  • Java

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS