Clases Envolventes

Java es un lenguaje de programación orientado a objetos. Un programa Java debe contener objetos y las operaciones entre ellos. La única excepción a esto en un programa Java son los tipos de datos primitivos (int, double, char, etc.)
Los tipos de datos primitivos no son objetos pero en ocasiones es necesario tratarlos como tales. Por ejemplo, hay determinadas clases que manipulan objetos (ArrayList, HashMap, …). Para poder utilizar tipos primitivos con estas clases Java provee las llamadas clases envolventes también llamadas clases contenedoras o wrappers.
Cada tipo primitivo tiene su correspondiente clase envolvente:

Tipo primitivo
Clase Envolvente
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Estas clases proporcionan métodos que permiten manipular el tipo de dato primitivo como si fuese un objeto.

Las conversiones entre los tipos primitivos y sus clases envolventes son automáticas. No es necesario hacer un casting. Para realizarlas se utiliza el Boxing/Unboxing.

Boxing: Convertir un tipo primitivo en su clase Wrapper.
Unboxing: Convertir un objeto de una clase  Wrapper en su tipo primitivo.
Ejemplo de Boxing:
double x = 29.95;
Double y;
y = x; // boxing
Ejemplo de Unboxing:
double x;
Double y = 29.95;
x = y; // unboxing
  


En la siguiente tabla aparecen algunos métodos de la clase Integer. El resto de clases envolventes correspondientes a tipos primitivos numéricos tienen métodos similares.

Integer(int valor)


Integer(String valor)

Constructor a partir de un int
Integer n = new Integer(20);

Constructor a partir de un String
String s = "123456";
Integer a = new Integer(s);

int intValue()
float floatValue()
double doubleValue()

Devuelve el valor equivalente
Integer n = new Integer(30);
int x = n.intValue();
double y = n.doubleValue();
int parseInt(String s)
Método estático que devuelve un int a partir de un String.
String s = "123456";
int z = Integer.parseInt(s);
       
String toBinaryString(int i)
String toOctalString(int i)
String toHexString(int i)



Métodos estáticos que devuelven un String con la representación binaria, octal o hexadecimal del número.
int numero = 12;
String binario = Integer.toBinaryString(numero);

Integer valueOf(String s)
Método Estático. Devuelve un Integer a partir de un String.
Integer m = Integer.valueOf("123");


Clase Character

Provee una serie de métodos para manipular los datos de tipo char. En la siguiente tabla aparecen algunos de estos métodos. 

Character(char c)



Constructor a partir de un char
char car = 'x';
Character a = new Character(car);
char charValue()

Devuelve el char equivalente
Character n = new Character('q');
char c = n.charValue();

boolean isLowerCase(char ch) boolean isUpperCase(char ch)
boolean isDigit(char ch)
boolean isLetter(char ch)
Comprueba si es un carácter en minúsculas.
Comprueba si es un carácter en mayúsculas.
Comprueba si es un dígito (carácter del 0 al 9).
Comprueba si es una letra.
Todos son estáticos.
if(Character.isUpperCase(c)){
  .....           
}
       
char toLowerCase(char ch)
char toUpperCase(char ch)




Devuelve el char en mayúsculas.
Devuelve el char en minúsculas.
Métodos estáticos.
char car = 'u';
System.out.println(Character.toUpperCase(car));
Character valueOf(char c)
Método Estático. Devuelve un Character a partir de un char.
Character m = Character.valueOf('a');
Ejemplo de uso de la clase Character: programa que lee un texto por teclado y muestra cuántos dígitos y letras contiene.

import java.util.Scanner;
public class JavaApplication325 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String texto;
        int cuentaCifras = 0, cuentaLetras = 0;
        System.out.println("Introduce texto ");
        texto = sc.nextLine();
        for (int i = 0; i < texto.length(); i++) {
            if (Character.isDigit(texto.charAt(i))) {
                cuentaCifras++;
            } else if (Character.isLetter(texto.charAt(i))) {
                cuentaLetras++;
            }
        }
        System.out.println("El texto contiene " + cuentaCifras + " dígitos");
        System.out.println("El texto contiene " + cuentaLetras + " letras");
    }
}


1 comentario:

  1. muy buena explicación, e incluso se puede omitir la segunda validación que se hace en el ciclo else if... ya que el método isDigit es verdadero solo si es un digito, de otra forma regresa falso. Entonces puede quedar el código también de esta forma:

    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String texto;
    int cuentaCifras = 0, cuentaLetras = 0;
    System.out.println("Introduce texto ");
    texto = sc.nextLine();
    for (int i = 0; i < texto.length(); i++) {
    if (Character.isDigit(texto.charAt(i))) {
    cuentaCifras++;
    } else {
    cuentaLetras++;
    }
    }
    System.out.println("El texto contiene " + cuentaCifras + " dígitos");
    System.out.println("El texto contiene " + cuentaLetras + " letras");
    }
    }

    Y genera el mismo resultado.
    De igual forma se puede hacer lo mismo usando el método isLetter. En ambos casos estamos dando por hecho que si no es uno es el otro y se agrega un valor al contador.

    Saludos!

    ResponderEliminar