|
|
Línea 116: |
Línea 116: |
| <div class="slide"> | | <div class="slide"> |
| ====la expresion==== | | ====la expresion==== |
| + | Tipos de expresiones |
| + | #un literal |
| + | #expresion booelana |
| + | #expresion aritmética |
| + | |
| + | ====Un literal==== |
| + | Es un valor directo |
| + | Pueden ser de los siguientes tipos |
| + | #literal entero |
| + | #literal real |
| + | #literal caracter |
| + | #literal cadena de caracteres '''String''' |
| + | =====Literales enteros===== |
| + | Se pueden expresar en 3 sistemas numéricos diferentes |
| + | Sistema decimal |
| + | sistema octal |
| + | sistema hexadecimal |
| + | |
| + | <source lang=java> |
| + | public class Literales { |
| + | public static void main(String []lista){ |
| + | System.out.println("Valor del número 10 en decimal "+10); |
| + | System.out.println("Valor del número 10 hexadecimal "+0x10); |
| + | System.out.println("Valor del número 10 octal en decimal "+010); |
| + | } |
| + | } |
| + | </source> |
| + | =====Literales long===== |
| + | Simplemente le acompañamos al literla de L |
| + | long num = 100L; |
| + | |
| + | =====Literales de números reales===== |
| + | |
| + | *Para representar '''números reales''' una de dos opciones |
| + | ** introducimos el punto decimal ç |
| + | ** utilizamos la notación científica. Por ejemplo: |
| + | double v = 300000.0; // notación normal |
| + | double v = 3.0e+5; // notación -científica |
| + | double v = 3.0E+5; // notación -científica |
| + | El signifiado de v en notación científica es <math>3.0 * 10 ^5</math> |
| + | v=30000D; |
| + | v=30000d; |
| + | float a; |
| + | a=3009F; |
| + | a=3002f; |
| + | |
| + | =====Literales char===== |
| + | *El valor de esta varialbe es un código Unicode. |
| + | *En el código ASCII había escasez de caracteres para cierto alfabetos |
| + | *Un literal de tipo char se expresa encerrando el carácter entre comillas simples: |
| + | char caracter = 'l'; |
| + | *Alternativamente se puede expresar directamente con el código Unicode en hexadecimal |
| + | char caracter ='\u0064'; |
| + | |
| + | El primer byte de la codificación Unicode es la misma que el código ASCII |
| + | *Por ejemplo el 64 en hexadecimal es 0x40 |
| + | <source lang=java> |
| + | public class Literalchar { |
| + | public static void main(String[] args) { |
| + | // TODO Auto-generated method stub |
| + | char arroba='\u0040';//64 en hexadecimal |
| + | System.out.print("Valor de arroba "+arroba); |
| + | } |
| + | } |
| + | </source> |
| + | |
| + | ==Literales boolean== |
| + | |
| + | Sencillamente true o false (verdadero o falso) sin comillas y en minúscula. No tienen correlación con ningún número como ocurre en el lenguaje C que teníamos al 0 como false y al 1 como true. |
| + | |
| + | ==Literales String== |
| + | |
| + | El tipo String no es un tipo de dato primitivo. Pero se comporta como si lo fuera. Para indicar una cadena de caracteres se encierran entre comillas dobles. |
| + | |
| + | String cadena = "Time is money"; |
| + | |
| + | ==Ejemplos de valores literales== |
| + | |
| + | {| border="1" cellpadding="5" cellspacing="0" |
| + | |- |
| + | ! Literal !! Tipo de dato |
| + | |- |
| + | | "Gato" || String |
| + | |- |
| + | | "G" || String |
| + | |- |
| + | | 'G' || char |
| + | |- |
| + | |- |
| + | | 123 || int |
| + | |- |
| + | | 8000L || long |
| + | |- |
| + | | 3.14 || double |
| + | |- |
| + | | 3.14D || double |
| + | |- |
| + | | 3.14f || float |
| + | |- |
| + | | 26.45e-45 || double |
| + | |- |
| + | | '\u00ff' || char |
| + | |- |
| + | | 'c' || char |
| + | |- |
| + | | "true" || String |
| + | |- |
| + | | true || boolean |
| + | |} |
| + | |
| + | En los sufijos que tenemos para identificar el tipo de dato no importa si son en minúscula o mayúscula. Pero por convención se utilizan en mayúscula, pues se puede confundir al leer el código una ele minúscula ( l ) con un uno ( 1 ). |
| + | Hay que tener cuidado de no olvidarnos los sufijos cuando sean necesarios. El siguiente código da un error en tiempo de compilación: |
| + | |
| + | {{Java/!|float}} f = 3.14; |
| + | |
| + | El compilador nos dará el error de "possible loss of precision" (posible pérdida de precisión). Esto se debe a que sin la F atrás, estamos indicando un valor de tipo double. El compilador se niega a comprimir un double de 64 bits en un float de tan solo 32 bits. Lo solucionamos de esta manera: |
| + | |
| + | {{Java/!|float}} f = 3.14f; |
| + | |
| + | Y le alegramos la vida a un compilador gruñon. |
| + | |
| + | |
| Un literal puede ser un valor de los siguientes tipos | | Un literal puede ser un valor de los siguientes tipos |
| numérico | | numérico |
ASIGNACIÓN Y EXPRESIONES EN JAVA
INSTRUCCION DE ASIGNACIÓN
El operador de asiganción es =
La sintaxis es
variable = expresion
El tipo de la variable y el de la expresión deben coincidir
En algunos casos que veremos java realiza una conversión implícita
int numEntero = 19;
float numFloat;
numFloat=numEntero //Java realiza la conversión
numEntero=numFloat;//Error no deja realizar esta conversion
Asignación entre tipos
Examine el siguiente código
public class AsignacionEnteros {
public static void main(String lista[]){
int numEntero=10;
float numFloat;
numFloat=numEntero; //Java realiza la conversión
//numEntero=numFloat;//Comentamos esta línea ya que da Error
System.out.print("Valor de entero "+numEntero+" y de float "+numFloat);
}//End Main
}//End Caracteres
Genera la siguiente salida
Valor de entero 10 y de float 10.0
Conversiones entre tipos
CONVERSIONES IMPLÍCITAS
Tipo destino |
Se puede asignar este tipo
|
short, int, long, float, double |
byte
|
int, long, float, double |
short
|
int, long, float, double |
char
|
long, float, double |
int
|
double |
long,float
|
- Las conversiones implícitas se realizan en la asignación
- También tienen lugar en las operaciones aritméticas
Conversiones por cast
- Este tipos de conversiones se fuerzan
la sintaxis para esta conversion es
(tipo_a_convertir)expresion
vamos a considerar expresión un valor o una variable
Analicemos el siguiente código
public class Casting {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=150;
double d=1235.345675;
//System.out.println("Valor en formato boolCopi
====Asignacion entre objetos====
<source lang=java>
import java.util.Scanner;
public class Definicion {
public static void main(String []a){
String nom;
Scanner l1,l2;
l1=new Scanner(System.in);
l2=l1; //En realidad son el mismo elemento ya que son la misma dirección de memoria
System.out.println("dame tu nombre que leeré con L2");
nom = l2.next(); //introduzco Manuel Romero Miguel Perez
System.out.println("Leyendo de L2 " +nom);// Visualiza Manuel
System.out.println("dame tu nombre L1");
nom=l1.next();//No espera ya que todavia tiene en el buffer Romero Miguel Perez
System.out.println("Leyendo de L1 " +nom); //Visualiza Romero
nom = l2.next();
System.out.println("Resto de L2 " +nom);//Visualiza Miguel
nom = l1.next();
System.out.println("Resto de L1 " +nom);//Visualiza Lopez
}
}
Salida del código anterior
dame tu nombre que leeré con L2
Manuel Romero Miguel Pérez
Leyendo de L2 Manuel
dame tu nombre L1
Leyendo de L1 Romero
Resto de L2 Miguel
Resto de L1 Pérez
Probar a que l1 y l2 sean dos objetos diferentes
l1=new Scanner(System.in);
l2=new Scanner(System.in);
Y no hacemos la asignacion l2=l1
Pregunta
observamos la diferencia?
- ahora l1 y l2 son dos buffers diferente
- cada uno guarda historia de lo que almacea
|
la expresion
Tipos de expresiones
- un literal
- expresion booelana
- expresion aritmética
Un literal
Es un valor directo
Pueden ser de los siguientes tipos
- literal entero
- literal real
- literal caracter
- literal cadena de caracteres String
Literales enteros
Se pueden expresar en 3 sistemas numéricos diferentes
Sistema decimal
sistema octal
sistema hexadecimal
public class Literales {
public static void main(String []lista){
System.out.println("Valor del número 10 en decimal "+10);
System.out.println("Valor del número 10 hexadecimal "+0x10);
System.out.println("Valor del número 10 octal en decimal "+010);
}
}
Literales long
Simplemente le acompañamos al literla de L
long num = 100L;
Literales de números reales
- Para representar números reales una de dos opciones
- introducimos el punto decimal ç
- utilizamos la notación científica. Por ejemplo:
double v = 300000.0; // notación normal
double v = 3.0e+5; // notación -científica
double v = 3.0E+5; // notación -científica
El signifiado de v en notación científica es [math]3.0 * 10 ^5[/math]
v=30000D;
v=30000d;
float a;
a=3009F;
a=3002f;
Literales char
- El valor de esta varialbe es un código Unicode.
- En el código ASCII había escasez de caracteres para cierto alfabetos
- Un literal de tipo char se expresa encerrando el carácter entre comillas simples:
char caracter = 'l';
- Alternativamente se puede expresar directamente con el código Unicode en hexadecimal
char caracter ='\u0064';
El primer byte de la codificación Unicode es la misma que el código ASCII
- Por ejemplo el 64 en hexadecimal es 0x40
public class Literalchar {
public static void main(String[] args) {
// TODO Auto-generated method stub
char arroba='\u0040';//64 en hexadecimal
System.out.print("Valor de arroba "+arroba);
}
}
Literales boolean
Sencillamente true o false (verdadero o falso) sin comillas y en minúscula. No tienen correlación con ningún número como ocurre en el lenguaje C que teníamos al 0 como false y al 1 como true.
Literales String
El tipo String no es un tipo de dato primitivo. Pero se comporta como si lo fuera. Para indicar una cadena de caracteres se encierran entre comillas dobles.
String cadena = "Time is money";
Ejemplos de valores literales
Literal |
Tipo de dato
|
"Gato" |
String
|
"G" |
String
|
'G' |
char
|
123 |
int
|
8000L |
long
|
3.14 |
double
|
3.14D |
double
|
3.14f |
float
|
26.45e-45 |
double
|
'\u00ff' |
char
|
'c' |
char
|
"true" |
String
|
true |
boolean
|
En los sufijos que tenemos para identificar el tipo de dato no importa si son en minúscula o mayúscula. Pero por convención se utilizan en mayúscula, pues se puede confundir al leer el código una ele minúscula ( l ) con un uno ( 1 ).
Hay que tener cuidado de no olvidarnos los sufijos cuando sean necesarios. El siguiente código da un error en tiempo de compilación:
Plantilla:Java/! f = 3.14;
El compilador nos dará el error de "possible loss of precision" (posible pérdida de precisión). Esto se debe a que sin la F atrás, estamos indicando un valor de tipo double. El compilador se niega a comprimir un double de 64 bits en un float de tan solo 32 bits. Lo solucionamos de esta manera:
Plantilla:Java/! f = 3.14f;
Y le alegramos la vida a un compilador gruñon.
Un literal puede ser un valor de los siguientes tipos
numérico
boolean
false true
caracter
Literal entre comillas simples 'c'
Secuencia unicode \u064
Secuencia de escape \t