Tipos primitivos, referencias y expresiones

Anuncio
Tipos primitivos, referencias y expresiones
LSUB
GSYC
23 de enero de 2013
(cc) 2013 Laboratorio de Sistemas,
Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, véase
http://creativecommons.org/licenses/by-sa/2.1/es. También puede solicitarse a Creative Commons, 559 Nathan
Abbott Way, Stanford, California 94305, USA.
Tipos en Java
Una variable puede:
• Ser una referencia a una instancia de una clase, esto es, una
referencia a un objeto de una clase dada. Todos los objetos se
encuentran en el heap.
• Ser de un tipo primitivo, por tanto, no es una referencia a una
instancia de una clase, sino que alberga directamente un valor.
Declaración y asignación
char c ; // d e c l a r a c i o n
char k = ’ x ’ ; // d e c l a r a c i o n con i n i c i a l i z a c i o n
c = k ; // a s i g n a c i o n
La asignación evalúa al valor asignado.
Tipos primitivos
• boolean, Literal: true,false
wrapper : Boolean
• char, 2 bytes (Unicode), Literal: ’a’
wrapper : Character
• byte, 1 byte con signo, Literal: 44
wrapper : Byte
• short 2 bytes con signo, Literal: 44
wrapper : Short
• int, 4 bytes con signo, Literal: 44
wrapper : Integer
• long, , 8 bytes con signo, Literal: 52332L
wrapper : Long
• float, 4 bytes con signo, Literal: 534.23F
wrapper : Float
• double, 8 bytes con signo, Literal: 32.34, 345.435D
wrapper : Double
• void
wrapper : Void
Autoboxing
Desde Java SE5 se pueden asignar variables de tipos primitivos a
una referencia de su clase wrapper correspondiente.
char c ;
C h a r a c t e r r c = new C h a r a c t e r ( ’ ’ ) ;
rc = c ;
Tipos primitivos
Siempre debemos inicializar las variables y miembros de clase.
En Java, sólo los miembros de clase tienen valores por omisión:
•
•
•
•
•
•
•
•
boolean: false
char: null
byte: (byte)0
short: (short)0
int: 0
long: 0L
float: 0.0F
double: 0.0D
Casting
Podemos convertir tipos de forma explı́cita (casting):
int x = 3;
byte b = ( byte ) x ;
En algunos casos se convierte de forma implı́cita (cuando el
destino es mayor que el origen):
• float ← int
• short ← byte
• int ← byte
• int ← short
• long ← int
• double ← float
Más detalles sobre tipos
• ¡Cuidado con los desbordamientos!
• De número real a número entero, se trunca. Si quieres
redondear, necesitas usar el método Math.round.
• El resultado de una operación aritmética o bit a bit sobre un
numérico menor que int (e.g. short o byte) promociona a
int.
Autoboxing
char c = ’ x ’ ;
C h a r a c t e r ch = new C h a r a c t e r ( ’ x ’ ) ;
c = ch ;
ch = c ;
Constantes
• Se definen como un atributo de clase final.
• No debemos tener números mágicos en el código.
f i n a l i n t MAX CLIENTS = 3 2 ;
Referencias
• Son punteros.
• Si asignas una referencia a otra, las dos apuntan al mismo
objeto.
• Si queremos tener dos referencias que apunten a dos objetos
similares, tendremos que hacer una copia.
Referencias
Date d1 = new Date ( 1 3 5 8 3 3 5 9 3 7 L ∗1000 L ) ;
Date d2 = d1 ;
Date d3 = ( Date ) d1 . c l o n e ( ) ;
d3 . s e t T i m e ( 0 L ) ;
System . o u t . p r i n t l n ( d1 ) ;
System . o u t . p r i n t l n ( d2 ) ;
System . o u t . p r i n t l n ( d3 ) ;
Ámbito
• El ámbito determina la visibilidad y vida de un identificador.
• El bloque en el que está declarado el identificador,
determinado por { y }, es el que establece su ámbito.
• En Java no se permite ocultar variables locales (¡pero nunca
deberı́amos ocultar!).
• Mientras que una instancia esté referenciada y la referencia
sea visible, la instancia es visible.
• Cuando la cuenta de referencias de una instancia llega a 0,
esto es, ningún elemento la referencia, se destruye
(recolección de basura).
Operadores
Precedencia de operadores (primero los de mayor precedencia):
e x p r++ e x p r −−
++e x p r −−e x p r +e x p r −e x p r ˜ !
∗ / %
+−
<< >> >>>
< > <= >= i n s t a n c e o f
== !=
&
ˆ
|
&&
||
? :
= += −= ∗= /= %= &= ˆ= |= <<= >>= >>>=
Comparando objetos
• ¡Cuidado con comparar referencias!
• Se usa el método equals para comparar dos objetos.
Date d1 = new Date ( 1 3 5 8 3 3 5 9 3 7 L ∗ 1000 L ) ;
Date d3 = new Date ( 1 3 5 8 3 3 5 9 3 7 L ∗ 1000 L ) ;
System . o u t . p r i n t l n ( d3 . e q u a l s ( d1 ) ) ;
System . o u t . p r i n t l n ( d3 == d1 ) ;
Comparaciones lógicas
• En Java se cortocircuita la evaluación de expresiones lógicas.
Date d1 = new Date ( 1 3 5 8 3 3 5 9 3 7 L ∗ 1000 L ) ;
Date d3 = n u l l ;
i f ( d1 != n u l l | | d3 . e q u a l s ( d1 ) ) {
System . o u t . p r i n t l n ( ” hey ! ” ) ;
}
Descargar