Tipos de datos, operadores y expresiones

Java utiliza clases para implementar todas las características del lenguaje; sin embargo, por razones de rendimiento, incorpora algunos tipos de datos que se conocen como «primitivos»: que incluyen números enteros (byte, short, int y long) y con punto decimal (float y double) con distintas precisiones (o número de bits para su representación), que en el caso de java siempre tienen signo (números positivos y negativos). Además de los tipos: boolean (almacenan verdadero o falso, true o false) y caracteres Unicode (char) para la representación de textos.

Primitivos Enteros
$\mathbb{Z}$
byte Byte (8 bits)
short Entero corto (16 bits)
int Entero (32 bits)
long Entero largo (64 bits)
Punto flotante
$\mathbb{R}$
float Punto flotante de 32 bits (estándar IEEE 754). En Java se requiere poner una letra “f” al final de una constante numérica (p.ej. 5.6f, 0f, 1.56E10f) para distinguirla de una constante de tipo double.
double Punto flotante de doble precisión de 64 bits (estándar IEEE 754)
Otros boolean Falso (false) o Verdadero (true)
char Un carácter de 16 bits, codificación Unicode
Clases String Se utiliza para representar textos o variables alfanuméricas. También se conoce como “cadena” de caracteres, de ahí su nombre “String”.
Integer Se utilizan para declarar números enteros (negativos, cero y positivos), corresponden ubicados entre Integer.MIN_VALUE e Integer.MAX_VALUE y cuentan con un tamaño en bits de Integer.SIZE
Double Se utilizan para declarar números con punto decimal, corresponden ubicados entre Double.MIN_VALUE e Double.MAX_VALUE y cuentan con un tamaño en bits de Double.SIZE. Es importante notar:
Double.NaN: Es una constante que representa que el valor almacenado no es un valor Double.
Double.NEGATIVE_INFINITY: representa $-\infty$ Double.POSITIVE_INFINITY: representa $+\infty$
Object Contiene la definición de la Clase básica de la que se derivan todas las clases de Java.
Definidas por el usuario Triángulo, Ecuacion2oGrado, TablaMultiplicar, Computadora, CuentaBancaria, …

A continuación se describe el uso de operadores y algunos símbolos importantes del lenguaje:

  • Símbolos y operadores

    Se utilizan las llaves de apertura y cierre para indicar que se ejecutarán un conjunto de sentencias como si fuera una, se conoce como sentencia múltiple. También indica los límites (inicio y el fin) de una estructura como la declaración de clases.

    En Java, las sentencias se deben terminar con un punto y coma, excepto el bloque de sentencias que en dónde no se escribe el punto y coma después de la llave de cierre.

    Del lado izquierdo va una variable, del lado derecho una expresión que se calcula antes de asignar a la variable. Se utiliza en variables derivadas de tipos de datos primitivos y referencias a objetos de una clase.

    Positivo, negativo, complemento de bits y negador lógico.

    Suma, resta, multiplicación, división y residuo.

    Operaciones sobre enteros aplicando and, or, xor entre ambos operadores.

    Equivale a “agregar” o “quitar” ceros en la representación binaria de un entero.

    Une los dos textos que se encuentran en cada lado del operador y crea un nuevo texto.

    Aplicar la operación previa entre la variable de la izquierda y la expresión de la derecha y asignarlo a la variable de la izquierda.

    Incremento y decremento, puede ir antes o después de una variable.

    Su uso se sugiere como una sola instrucción (i++; o ++i;) aunque puede escribirse dentro de una expresión más compleja. Si el operador de incremento va previo a la variable, se incrementa y luego se operan el resto de la función matemática; si es posfijo, se realiza la operación con el valor que se tiene, se opera la asignación y después se incrementa la variable.

  • Números enteros

    El lazo de regreso indica que después de escribir un dígito decimal, pueden ponerse más dígitos; siempre y cuando los números se encuentren en los rangos válidos de acuerdo al número de bits del número. No se usan separaciones por comas:

    También se puede obtener la representación en octal iniciando con 0 (no se usa signo), pero se entiende que el primer bit del primer bit de la representación en memoria es el del signo.

    Y la representación en hexadecimal con el prefijo 0x (no se usa signo, pero se entiende que el primer bit de la representación en memoria es el del signo).

    Valores válidos por número de bits de los enteros:

    byte 8 bits –128 a 127
    short 16 bits –32,768 a 32,767
    int 32 bits –2,147,483,648 a 2,147,483,647
    long 64 bits –9,223,372,036,854,775,808 a 9,223,372,036,854,775,807
  • Números con punto decimal

    El lazo de regreso indica que después de escribir un dígito decimal, pueden ponerse más dígitos; siempre y cuando los números se encuentren en los rangos válidos de acuerdo al número de bits del número. No se usan separaciones por comas:

    También hay que tener en cuenta que normalmente se expresan las cantidades en notación científica donde la “E” que aparece se sustituye por “por 10 elevado a”:

    3.14E4 sería: $3.14 \times 10^4$

    -1.0E-6 sería: $-1.0 \times 10^{-6}$ = -0.000001

    0.0625 = 6.25 × 10-2 sería codificado en Java como 6.25E-2

    Se utiliza la notación de precisión doble pero debe agregarse una letra «f» al final.

    Valores válidos por número de bits de los enteros:

    double 64 bits ±4.94065645841246544E–324 a ±1.7976931348623157E308
    float 32 bits ±1.40239846E-45 a ±3.40282347E38

    Observa como hay una mayor precisión expresada en dígitos después del punto decimal, el resto se redondeará al número más cercano representable por el número de bits

  • Caracteres

    Las constantes de caracteres utilizan para representar un carácter en el sistema de codificación UNICODE (el estandar Unicode y las especificaciones asociadas proveen a los programadores de una manera sencilla con una codificación en bits de los símbolos estandarizados —letras, números, símbolos de puntuación, emojis, etc.)

    Se inicia y termina con una comilla sencilla (cuida que se vea recta, algunos editores las convierten en tipográficas y se ven medio redondeadas), y en medio se escribe un carácter o un símbolo. Opcionalmente, se puede utilizar la representación hexadecimal del carácter iniciando con la secuencia \u

    Originalmente se utilizaba el código ASCII y algunos símbolos dependiendo del país o región del mundo, en los que se ocupaban 8 bits para su representación. Actualmente los caracteres se definen con el estándar de UNICODE y pueden almacenarse en 8 o 16 bits.

    Ejemplos:

    '0', '\u0030' (representa el carácter del dígito cero ‘0’).

    '@', '\u0040' (código hexadecimal para el número 64 que representa a la arroba).

    'A', '\u0041' (código hexadecimal para el número 65 que representa a la ‘A’ mayúscula), etc.

  • Identificadores

    Los «identificadores» siguen las siguientes reglas de construcción:

    Identificadores

    En términos generales Java sigue las siguientes convenciones para identificadores:

    Clases: empiezan con mayúscula, van capitalizados y son sustantivos en singular que describen una abstracción.

    Atributos: empiezan con minúscula, van capitalizados y son sustantivos en singular que identifican partes que tienen cada instancia de una clase.

    Métodos: empiezan con minúscula, van capitalizados y son verbos en singular que describen acciones de la clase.

    Constantes: van en mayúsculas son adjetivos calificativos o sustantivos y se escriben en mayúsculas, si hay varias palabras se separan con un guion largo o bajo.

    Ya que los identificadores no incluyen el símbolo de espacio, se utiliza la capitalización cuando haya varias palabras. Se entiende por capitalizar, separar las palabras iniciando con mayúscula cada una de ellas. Por ejemplo un identificador para indicar que algo se llama “eje transversal” sería ejeTransversal.

Ejercicio de selección

Para cada una de las siguientes declaraciones, determina si la inicialización es correcta dependiendo del tipo de dato indicado.

Recuerda que la declaración de las variables es la de la siguiente imagen. Utiliza los diagramas sintácticos de los tipos de datos primitivos.

int i = 3.4;

Retro

Los números enteros no usan punto decimal.

double y = 4.6e4;

Retro

La letra E equivale a una potencia de 104. Por lo anterior el número representado es 4.6×104 o bien 46000.

char c = "H";

Retro

La declaración de caracteres usa comillas simples, las comillas dobles son para String.

char c = '\u1234';

Retro

Es la declaración de un carácter utilizando una sentencia UNICODE de un carácter con representación hexadecimal 0x1234.