Bienvenido al Blog, en esta oportunidad desarrollaremos un tema de introducci贸n al desarrollo de programaci贸n orientado a objetos, para entender sobre c贸mo desarrollar un sistema con el lenguaje java veremos acerca de declaraci贸n, inicializaci贸n y uso de variables en Java.
- El contenido de este blog tiene como fuente el curso Fundamentos de programaci贸n de Oracle.
- Con algunos agregados del autor "EL INFORMATICO IBERO"
脴
Las variables se utilizan para almacenar y
recuperar datos utilizados por los programas.
脴
Las variables de atributo (variables declaradas
fuera de un m茅todo y sin la palabra clave static) tambi茅n se denominan variables
miembro o variables de instancia (por ejemplo, price, shirtID y colorCode
en la clase Shirt).
脴
Cuando se instancia un objeto a partir de una
clase, estas variables contienen datos espec铆ficos de la instancia.
脴
Cuando se instancia un objeto de una clase,
estas variables se denominan variables
de instancia porque pueden contener datos espec铆ficos de una determinada
instancia de la clase.
脴
Por ejemplo, una instancia de la clase Shirt
puede tener el valor 7 asignado a la variable de atributo quantityInStock,
mientras que otra instancia de la clase Shirt puede tener el valor 100 asignado
a la variable de atributo quantityInStock.
脴
Tambi茅n es posible definir variables dentro
de los m茅todos. Estas variables se denominan locales porque
s贸lo est谩n disponibles en el interior del m茅todo en el que se han declarado.
脴
No se han declarado variables locales en la
clase Shirt. No obstante, si se utilizasen variables locales, se declarar铆an en
el m茅todo displayInformation.
El lenguaje
Java hace amplio uso de las variables para tareas tales como:
- Almacenar datos de atributo exclusivos de una
instancia de objeto (como hemos visto en el caso de las variables price e
ID).
- Asignar el valor de una variable a otra.
- Representar valores dentro de una expresi贸n matem谩tica.
- Imprimir los valores en la pantalla. Por ejemplo,
la clase Shirt utiliza las variables price e ID para mostrar en la
pantalla el precio y el ID de la camisa:
眉
System.out.println("Precio de la camisa:
" + price);
眉
System.out.println(“ID de camisa: " +
shirtID);
- Almacenar referencias a otros objetos.
- Declaraci贸n e Inicializaci贸n de variables
La declaraci贸n
e inicializaci贸n de variables de atributo se ajusta a las mismas reglas
generales. La declaraci贸n e inicializaci贸n de estas variables sigue esta
sintaxis:
Las variables locales pueden declararse e inicializarse por separado (en l铆neas de c贸digo distintas) o en una misma l铆nea de c贸digo. La sintaxis para declarar una variable en el interior de un m茅todo es:
La sintaxis para inicializar una variable en el interior de un m茅todo es:
Identificaci贸n de la sintaxis y el
uso de las variables
脴
Declaraci贸n e Inicializaci贸n de variables
La sintaxis para declarar e inicializar una variable en el interior de un m茅todo es:
- [modificadores] representa diferentes palabras clave de Java, como public y private, que determinan el modo en que otro c贸digo accede a una variable de atributo. Los modificadores son opcionales (como indican los corchetes). Por ahora, todas las variables que cree deber铆an tener el modificador public (p煤blico).
- tipo
representa la clase de informaci贸n o datos que contiene la variable.
Algunas variables contienen caracteres, otras contienen n煤meros y algunas
son booleanas (boolean), con lo que s贸lo pueden admitir uno de dos valores
posibles. Es preciso asignar un tipo a cada variable para indicar la
clase de informaci贸n que pueden almacenar.
o identificador
es el nombre asignado a la variable que contiene ese tipo.
o valor
es el valor que se quiere asignar a la variable. Es un elemento opcional porque
no es necesario asignar ning煤n valor a una variable en el momento de
declararla.
o A continuaci贸n figuran las declaraciones de las variables de atributo en la clase Shirt:
Descripci贸n de los Tipos de Datos Primitivos
脴 Muchos
valores de los programas Java se almacenan como tipos de datos primitivos.
脴 脡stos
son los ocho tipos de datos primitivos incorporados al lenguaje de
programaci贸n Java:
o Tipos
enteros: byte, short, int y long
o Tipos
en coma flotante: float y double
o Tipo
textual: char
o Tipo
l贸gico: boolean
脴 Tipos
primitivos enteros
o Hay
cuatro tipos primitivos enteros en el lenguaje Java y se identifican
mediante las palabras clave byte, short, int y long. Las variables de este tipo
almacenan n煤meros que no tienen separador decimal.
o Por
ejemplo, si necesita guardar edades de personas, una variable de tipo byte
ser铆a apropiada porque este tipo acepta valores dentro del rango adecuado.
o En la tabla siguiente figuran todos los tipos enteros, sus tama帽os y el rango de valores que pueden admitir.
o Cuando
especifique un valor literal para un tipo long, escriba una L en may煤scula a
la derecha del valor para indicar expl铆citamente que se trata de un tipo
long. El compilador considera los enteros como valores de tipo int, a
menos que se especifique una L para indicar que se trata de un tipo long.
o La clase Shirt contiene dos atributos de tipo int para almacenar los valores del ID de camisa y la cantidad disponible en el almac茅n, y se utilizan valores literales para proporcionar un valor inicial de cero (0) a cada atributo.
o La
煤nica raz贸n para utilizar tipos byte y short en los programas es ahorrar
memoria. Dado que la mayor铆a de los equipos de sobremesa modernos contienen
gran cantidad de memoria, hay muchos programadores de aplicaciones de
escritorio que no utilizan ni tipos byte ni short. En los ejemplos de este
curso se utilizan fundamentalmente tipos int y long.
脴 Tipos
primitivos en coma flotante
o Hay
dos tipos para expresar n煤meros en coma flotante, float y double. Estos
tipos se utilizan para almacenar n煤meros que contienen valores a la derecha del
separador decimal (en este caso, el punto), como 12.24 o 3.14159.
o La tabla siguiente contiene informaci贸n sobre los dos tipos en coma flotante.
- Cuando
especifique un valor literal para un tipo float, agregue una F may煤scula
(float) a la derecha del n煤mero para indicar que se trata de un tipo
float y no double. Los valores literales de los tipos en coma flotante se
consideran autom谩ticamente de tipo double, a menos que se especifique
lo contrario mediante el uso de la F para indicar el tipo float.
- La clase Shirt incluye el uso de un valor literal de tipo double para representar el valor predeterminado de precio (price):
- Utilice
el tipo double cuando necesite un rango de valores mayor o un grado de
precisi贸n m谩s elevado.
Descripci贸n de los Tipos de Datos Primitivos
脴 Tipo
primitivo Textual
o Otro
tipo de datos que se utiliza para almacenar y manipular la informaci贸n es el
que se expresa a trav茅s de un solo car谩cter. El tipo primitivo utilizado
para almacenar caracteres aislados como, por ejemplo, ‘a’, se llama char y
tiene un tama帽o de 16 bits.
o La clase Shirt incluye el uso de un valor literal de tipo textual para representar el valor predeterminado del color (colorCode):
- Cuando
se asigna un valor literal a una variable char, por ejemplo una t, es
preciso escribir el car谩cter entre ap贸strofes: ’t’. Esto permite al
compilador reconocer esa t como un valor literal y no como una variable t
que representa otro valor.
o
El tipo char no almacena el car谩cter escrito
como tal, por ejemplo la t antes mencionada. La representaci贸n almacenada en
char se transforma en una serie de bits que corresponden a un car谩cter. Las
correspondencias entre cada car谩cter y el n煤mero que representa est谩n
establecidas en el juego de caracteres que utilice el lenguaje de
programaci贸n.
o
Muchos lenguajes inform谩ticos utilizan el c贸digo
ASCII (American Standard Code for Information Interchange), un juego de
caracteres de 8 bits que contiene un elemento por cada signo de puntuaci贸n,
n煤mero, letra del alfabeto o car谩cter utilizados en ingl茅s.
o
El lenguaje Java utiliza un juego de
caracteres de 16 bits llamado Unicode que es capaz de almacenar todos los
caracteres que sea necesario reproducir en la gran mayor铆a de los idiomas
utilizados en el mundo moderno. Por tanto, puede escribir sus programas de
forma que funcionen y presenten sus datos correctamente en el idioma de la
mayor铆a de los pa铆ses.
o
Unicode contiene un subconjunto del juego
ASCII (los primeros 128 caracteres).
脴
Tipo primitivo L贸gico
o
Los programas inform谩ticos a menudo deben tomar
decisiones. El resultado de una decisi贸n, por ejemplo, la evaluaci贸n de una
sentencia de un programa como verdadera o falsa, puede guardarse en variables
boolean (booleanas). Las variables de tipo boolean s贸lo pueden almacenar:
眉
Los literales true o false del lenguaje Java.
眉
El resultado de una expresi贸n que s贸lo se eval煤a
como true o false. Por ejemplo, si la variable respuesta es igual
a 42, la expresi贸n “if respuesta < 42” dar谩 como resultado el valor false.
脴
Elecci贸n del tipo de dato
o
Una pr谩ctica habitual entre los programadores
con experiencia es usar los tipos int, long o double para variables
num茅ricas a menos que, por la clase de negocio, exista una raz贸n para ahorrar
memoria (por ejemplo, al programar para dispositivos de consumo tales como los
tel茅fonos celulares) o para garantizar tiempos r谩pidos de ejecuci贸n.
Declaraci贸n de variables y
asignaci贸n de sus valores
脴
Las variables deben declararse antes de
utilizarlas. En las secciones siguientes se explica c贸mo declarar las
variables y asignarles valor.
脴
Asignaci贸n de nombre a las variables
o
Al igual que ocurre con las clases o los
m茅todos, es preciso asignar a cada variable de un programa un nombre o
identificador.
o
Recuerde que el prop贸sito de las variables es
actuar como mecanismo para guardar y recuperar valores. Por tanto, es
conveniente que sus identificadores sean sencillos pero descriptivos. Por ejemplo, si almacena el valor de un ID de
art铆culo, puede asignar a la variable el nombre miID, idArticulo,
numeroArticulo, o alguna otra designaci贸n que deje claro el uso de la variable
tanto para usted como para otras personas que lean el programa.
脴
Reglas y directrices de asignaci贸n de nombre a
los identificadores de las variables
Utilice las reglas siguientes
como ayuda a la hora de asignar identificadores a las variables:
- Los
identificadores de las variables deben empezar por una letra en
may煤scula o min煤scula, un signo de subrayado (_) o un signo de d贸lar ($).
Despu茅s del primer car谩cter, puede usar d铆gitos.
- Los
identificadores de las variables no pueden contener signos de
puntuaci贸n, espacios ni guiones.
- Las
palabras clave de Java, que aparecen en la tabla siguiente, no pueden
utilizarse como identificadores.
Deber铆a utilizar las directrices siguientes como
referencia a la hora de asignar identificadores a las variables:
- Empiece
cada variable con una letra en min煤scula y el resto de las palabras con
la inicial en may煤scula, como, por ejemplo, miVariable.
- Elija
nombres nemot茅cnicos que indiquen a cualquier posible lector el prop贸sito
de la variable.
El lenguaje Java considera que dos caracteres del c贸digo son
distintos si uno se escribe en may煤scula y el otro en min煤scula. Por
ejemplo, una variable llamada pedido ser谩 distinta de otra llamada Pedido.
脴 Asignaci贸n
de valores a las variables
o A
una variable se le puede asignar su valor en el momento de declararla o m谩s
adelante.
o Para asignarle el valor durante su declaraci贸n, agr茅guele el signo igual (=) despu茅s de declararla y escriba el valor que le quiera asignar. Por ejemplo, a la variable del atributo price en la clase Shirt podr铆a asignarle el valor 12.99 como precio de un determinado objeto Shirt.
o Un ejemplo de declaraci贸n y asignaci贸n de valores de variables boolean podr铆a ser:
o El
operador = asigna el valor del t茅rmino derecho de la igualdad al elemento del
t茅rmino izquierdo. El signo = deber铆a leerse como “est谩 asignado a”.
Por ejemplo, el ejemplo anterior podr铆a entenderse como: el valor “12.99 est谩
asignado a price”. Los operadores, como el de asignaci贸n (=), se explican
m谩s adelante en el curso.
o Las
variables de atributo se inicializan autom谩ticamente: los tipos enteros
se definen como 0, los tipos en coma flotante se definen como 0.0, el tipo char
recibe el valor de \u0000 y el tipo boolean se establece como false. No obstante,
las variables de atributos deber铆an inicializarse de forma expl铆cita para que
otras personas puedan leer el c贸digo.
o Las
variables locales (las que se declaran dentro de un m茅todo) deben
inicializarse expl铆citamente antes de su uso.
脴 Declaraci贸n
e inicializaci贸n de varias variables en una l铆nea de C贸digo
o Es posible declarar una o m谩s variables en la misma l铆nea de c贸digo, pero s贸lo si son del mismo tipo. Las sintaxis para declarar varias variables en una misma l铆nea de c贸digo son:
- Por
lo tanto, si hubiese un precio de venta al p煤blico y otro de venta al por
mayor en la clase Shirt, se declarar铆an de la forma siguiente:
脴 Otras
formas de declarar variables y asignarles valor
Los valores de las variables se
pueden asignar de diversas formas:
oAsign谩ndoles directamente valores literales (como se ha explicado a lo largo del m贸dulo):
oAsignando el valor de una variable a otra:
oSi el contenido de ID cambia m谩s adelante, el
contenido de saleID no cambia autom谩ticamente. Aunque los dos
enteros tienen el mismo valor en ese momento, pueden cambiarse de forma
independiente en otra parte posterior del programa.
脴 Otras
formas de declarar variables y asignarles valor
oAsignando el resultado de una expresi贸n a
las variables de tipo entero, en coma flotante o booleanas.
En las l铆neas de c贸digo siguientes, el resultado de todos los t茅rminos situados a la derecha del operador = se asignan a la variable situada a la izquierda del operador.
oAsignando a una variable el valor de
retorno de una llamada a un m茅todo. Esta forma de asignaci贸n se trata m谩s
adelante en el curso.
脴 Constantes
oEn este m贸dulo hemos hablado de variables
cuyos valores puede cambiar el programador. En esta secci贸n, aprender谩 a usar
constantes para representar valores que no pueden cambiar.
oImagine que est谩 escribiendo parte del programa del cat谩logo de prendas de la empresa y necesita hacer referencia a la tasa del impuesto sobre la venta. Podr铆a crear la siguiente variable en su clase:
oPotencialmente, este valor podr铆a cambiar
dentro del programa, aunque el impuesto deber铆a definirse una vez y
permanecer constante a lo largo de la aplicaci贸n. Por tanto, es preferible
almacenar el valor en un lugar donde no pueda cambiar.
oUtilice la palabra clave final para
convertir el valor en una constante, es decir, decirle al compilador que no
quiere que el valor de la variable cambie una vez que haya sido inicializada.
oAsimismo, por convenci贸n, denomine los identificadores de las constantes con palabras en may煤sculas separadas por signos de subrayado. De esta forma, es m谩s f谩cil saber que se trata de una constante.
oCualquier otra persona que necesite acceder al
impuesto sobre la venta utilizar谩 la constante SALES_TAX y no necesitar谩
conocer la tasa del impuesto ni preocuparse ante la posibilidad de cambiarlo
por error.
oSi alguien intenta cambiar el valor de una
constante una vez que se le ha asignado un valor, el compilador presentar谩 un
error. Si se modifica el c贸digo a fin de proporcionar otro valor para la
constante, ser谩 preciso recompilar el programa.
oEn caso de que se incrementase el impuesto
sobre la venta, deber铆a cambiar la constante en la ubicaci贸n del programa donde
se haya definido. Todos los usos de la constante adoptar铆an el cambio
autom谩ticamente.
oLas constantes tambi茅n resultan pr谩cticas para
valores que son extremadamente largos, como es el caso de la pi (3.14159...).
oDirectrices de asignaci贸n de nombres a las
constantes
脴
El nombre que se asigne a las constantes deber铆a
ser f谩cil de identificar. En general, deber铆an escribirse enteramente en
may煤sculas y separar las distintas palabras mediante un signo de subrayado (_).
脴 Almacenamiento
de tipos primitivos y constantes en la memoria
oCuando se utiliza un valor literal o se crea
una constante o una variable y se le asigna un valor, 茅ste se almacena en la
memoria del equipo.
oEn la figura siguiente puede observarse c贸mo, al almacenarse, las variables locales se separan (en la pila) de las variables de atributo situadas en el espacio de memoria din谩mica (heap).
脴 Almacenamiento
de tipos primitivos y constantes en la memoria
oLos objetos, sus variables de atributo y
sus m茅todos normalmente se almacenan en el espacio de memoria din谩mica. A
este espacio se le asignan de forma din谩mica fragmentos de memoria que
contienen la informaci贸n utilizada para contener los objetos (incluidas sus
variables de atributo y m茅todos) mientras el programa los necesita.
oOtras variables suelen almacenarse en la
pila de memoria. Esta memoria guarda elementos que s贸lo se utilizan durante
un breve periodo de tiempo (m谩s breve que la vida de un objeto), como es el
caso de las variables declaradas en el interior de un m茅todo.
Uso de operadores aritm茅ticos para
modificar valores
脴 Los
programas realizan gran cantidad de c谩lculos matem谩ticos, desde los m谩s simples
hasta algunos muy complejos. Los operadores aritm茅ticos permiten especificar la
forma en que deben evaluarse o combinarse los valores num茅ricos contenidos en
las variables.
脴 Operadores
matem谩ticos est谩ndar
oEn la tabla siguiente se muestran los
operadores matem谩ticos est谩ndar (a menudo denominados operadores binarios)
utilizados en el lenguaje Java.
Uso de operadores aritm茅ticos para modificar valores
Operadores de incremento y decremento (++ y --)
oUn requisito com煤n en los programas es sumar o restar 1 al valor de una variable. Esto se hace utilizando el operador + de la manera siguiente:
oNo obstante, aumentar o reducir un valor en
incrementos o decrementos de 1 es una operaci贸n tan com煤n que existen
operadores unarios para realizarla: los operadores de incremento (++) y
decremento (--). Estos operadores pueden aplicarse antes (preincremento y
predecremento) o despu茅s (posincremento y posdecremento) de la variable.
Uso de operadores aritm茅ticos para
modificar valores
Operadores de incremento y decremento (++ y --)
oLa l铆nea de c贸digo anterior, en la que la edad iba aumentando en incrementos de uno tambi茅n puede escribirse de la forma siguiente:
oUtilice estos operadores con precauci贸n en
las expresiones. Si se utilizan como prefijo, la operaci贸n (incremento o
decremento) se aplica antes de cualquier c谩lculo o asignaci贸n posterior. En
su forma de sufijo, la operaci贸n se aplica despu茅s de los sucesivos c谩lculos
u operaciones, de forma que en los c谩lculos o asignaciones posteriores se
utiliza el valor original, no el valor actualizado. En la tabla siguiente
se muestra el uso de los operadores de incremento y decremento.
Uso de operadores aritm茅ticos para
modificar valores
脴 Operadores de incremento y decremento (++ y --)
Uso de operadores aritm茅ticos para
modificar valores
脴 Operadores
de incremento y decremento (++ y --)
oEn el ejemplo siguiente se muestra un uso b谩sico de los operadores de incremento y decremento:
oEl resultado de este fragmento de c贸digo ser铆a:
Uso de operadores aritm茅ticos para
modificar valores
脴 Orden
de precedencia de los operadores
oEn una sentencia matem谩tica compleja que
contenga varios operadores en la misma l铆nea, ¿c贸mo determina el procesador qu茅
operador debe utilizar primero?:
oReglas de precedencia
眉
Para que las operaciones matem谩ticas mantengan
un comportamiento homog茅neo, el lenguaje Java sigue las reglas matem谩ticas
habituales para la precedencia de los operadores. 脡stos se procesan en el orden
siguiente:
v
Operadores incluidos entre par茅ntesis de
apertura y cierre.
v
Operadores de incremento y decremento.
v
Operadores de multiplicaci贸n y divisi贸n evaluados
de izquierda a derecha.
v
Operadores de suma y resta evaluados de
izquierda a derecha.
眉 Si en una sentencia aparecen sucesivamente varios operadores matem谩ticos est谩ndar con el mismo orden precedencia, los operadores se eval煤an de izquierda a derecha.
脴 Orden
de precedencia de los operadores
oEjemplo de la necesidad de utilizar reglas de
precedencia
眉 En el ejemplo siguiente se demuestra la necesidad de utilizar un orden de precedencia de los operadores:
眉
En este ejemplo, no est谩 clara la intenci贸n del
autor. El resultado puede evaluarse de las formas siguientes:
v Expresi贸n resultante al evaluar estrictamente de izquierda a derecha: 34
v Aut茅ntica expresi贸n resultante, evaluada seg煤n las reglas de precedencia que se indican mediante los par茅ntesis: 9
脴 Orden
de precedencia de los operadores
oUso de los par茅ntesis
眉 Las expresiones se eval煤an autom谩ticamente seg煤n las reglas de precedencia, no obstante deber铆a utilizar par茅ntesis para dejar clara la estructura que pretende utilizar:
Uso de la promoci贸n y conversi贸n de tipos
脴 Asignar
una variable o una expresi贸n a otra variable puede provocar discrepancias entre
los tipos de datos de los c谩lculos y el lugar de almacenamiento utilizado para
guardar el resultado.
脴 En
concreto, el compilador detectar谩 que se va a perder precisi贸n y no permitir谩
la compilaci贸n del programa o bien el resultado ser谩 incorrecto.
脴 Para
resolver este problema, es necesario:
oPromover los tipos de las variables a un tipo
de tama帽o superior, o
oRealizar la conversi贸n a un tipo de tama帽o
inferior.
脴 Por ejemplo, considere la siguiente asignaci贸n:
脴 Este
c贸digo deber铆a funcionar porque un tipo byte, aunque es menor que un tipo int,
es lo suficientemente grande como para almacenar un valor de 100.
脴 Sin
embargo, el compilador no realizar谩 la asignaci贸n y, en su lugar, generar谩
un error de “posible p茅rdida de precisi贸n” porque un valor byte es menor en
tama帽o que un valor int.
脴 Para
corregir este problema, puede convertir los tipos de datos de la derecha en
tipos m谩s peque帽os para que coincidan con los tipos de la izquierda, o bien
declarar la variable de la izquierda (num3) de forma que contenga un tipo de
datos m谩s grande, por ejemplo int.
脴 El problema se corrige cambiando num3 por el tipo int:
脴 Promoci贸n
oEn algunas circunstancias, el compilador
cambia el tipo de una variable por otro tipo que admita un valor de mayor
tama帽o. Esta acci贸n se conoce como promoci贸n. El compilador realiza
autom谩ticamente algunas promociones si, al hacerlo, no se pierden datos.
Esto ocurre en las siguientes situaciones:
眉
Si asigna un tipo m谩s peque帽o (a la derecha del
signo =) a un tipo m谩s grande (a la izquierda del signo =).
眉
Si asigna un tipo entero a un tipo en coma
flotante (aunque podr铆a perderse algo de precisi贸n en los bits menos
significativos del valor cuando asigne un valor int o long a un tipo float, o
bien un valor long a un tipo double).
oEl ejemplo siguiente contiene un literal (un valor int) que se promover谩 autom谩ticamente a otro tipo (long) antes de asignar el valor (6) a la variable (big de tipo long). En los ejemplos siguientes se muestra qu茅 tipos promover谩 autom谩ticamente el compilador y cu谩les no.
oDado que el 6 es un tipo int, la promoci贸n
funciona porque el valor int se convierte en un valor long.
oAntes de asignarse a una variable, el
resultado de una ecuaci贸n se coloca en una ubicaci贸n temporal o contenedor de
la memoria. El tama帽o de esta ubicaci贸n siempre es igual que el tama帽o del
tipo de datos m谩s grande utilizado en la expresi贸n o la sentencia. Por ejemplo,
si la ecuaci贸n multiplica dos tipos int, el tama帽o del contenedor
tendr谩 el tama帽o de un tipo int, o 32 bits.
oSi los dos valores multiplicados dan como
resultado un valor que supera las dimensiones de un tipo int (por ejemplo,
55555*66666=3,703,629,630, que es demasiado grande para caber en un tipo
entero), el valor int debe truncarse para que el resultado quepa en la
ubicaci贸n temporal asignada en la memoria. Este c谩lculo al final produce
una respuesta incorrecta porque la variable correspondiente recibe un valor
truncado (con independencia del tipo usado para la respuesta).
oPara resolver este problema, defina al
menos una de las variables de la ecuaci贸n con el tipo long a fin de garantizar
el mayor tama帽o posible para el espacio asignado en la memoria temporal.
脴 Conversi贸n
de tipos
oLa conversi贸n de tipos reduce el rango de
un valor literalmente “cort谩ndolo” para adaptarlo a un tipo de tama帽o m谩s
peque帽o. Se produce, por ejemplo, cuando se convierte un valor long en un
valor int. Esto se hace para poder usar m茅todos que aceptan s贸lo ciertos tipos
como argumentos, y poder asignar as铆 valores a una variable de un tipo de menor
tama帽o, o para ahorrar memoria.
oColoque el tipo_destino (el tipo en el que se va a convertir el valor) entre par茅ntesis antes del elemento que vaya a convertir. La sintaxis para convertir el tipo de un valor es:
oDonde:
眉
El identificador es el nombre que se asigna a
la variable.
眉
valor es el valor que se quiere asignar al
identificador.
眉
(tipo_destino) es el tipo en el que se va a
convertir el valor. Recuerde que tipo_destino debe escribirse entre
par茅ntesis.
oPor ejemplo, considere la siguiente asignaci贸n:
oEl error de compilaci贸n se corrige convirtiendo el tipo del resultado en un tipo byte.
oUtilice la conversi贸n de tipos con
precauci贸n. Por ejemplo, si se utilizasen n煤meros de mayor tama帽o para num1
y num2, la conversi贸n en un tipo byte truncar铆a parte de esos datos, con lo que
el resultado ser铆a incorrecto.
oOtros posibles problemas se indican a continuaci贸n:
脴 Suposiciones
del compilador con respecto a los tipos enteros y en coma flotante
oEl compilador de Java parte de algunos
supuestos cuando eval煤a expresiones. Debe comprender estos supuestos para
realizar las conversiones de tipos apropiadas u otro tipo de adaptaciones.
oTipos de datos enteros y operaciones
眉
Cuando se utilizan valores con tipos de datos
primitivos en una expresi贸n con determinados operadores (*, /, -, +, %), los
valores se convierten autom谩ticamente en un valor int (o superior si es
necesario) y luego se ejecuta la operaci贸n. Esta conversi贸n puede provocar
desbordamiento de datos o falta de precisi贸n.
oEn el ejemplo siguiente, se produce un error porque dos de los tres operandos (a y b) se promueven autom谩ticamente del tipo short a un tipo int antes de sumarse:
oEn la 煤ltima l铆nea, los valores de a y b se
convierten en tipos int y se suman para proporcionar un resultado de tipo int.
A continuaci贸n, el operador de asignaci贸n (=) trata de asignar el resultado int
a la variable de tipo short (c). Pero esta asignaci贸n no es v谩lida y provoca un
error de compilaci贸n.
oEl c贸digo funcionar谩 si realiza una de estas
operaciones:
眉 Declarar c como un tipo int en la declaraci贸n original:
眉 Convertir el tipo del resultado de (a+b) en la l铆nea de asignaci贸n:
oTipos de datos en coma flotante y forma de
asignarlos
眉
Al igual que los tipos enteros adoptan
autom谩ticamente la forma int en algunas circunstancias, los valores asignados a
los tipos en coma flotante siempre adoptan la forma double, a menos que se
especifique expresamente que el valor es de tipo float.
眉 Por ejemplo, la l铆nea siguiente provocar铆a un error de compilaci贸n. Dado que 27.9 se considera autom谩ticamente del tipo double, se produce un error de compilaci贸n porque un valor double no cabe en una variable de tipo float.
眉
Las dos alternativas siguientes funcionar铆an
correctamente:
v La F indica al compilador que 27.9 es un valor float:
v 27.9 se convierte en un tipo float:
眉
En el ejemplo del c贸digo siguiente se utilizan
los principios explicados en esta secci贸n para calcular la edad de una persona
expresada en d铆as y segundos.