style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Clases envolventes - Wrapper classes

Muchas veces nos encontramos con problemas de conversión de tipos de datos, principalmente cuando le solicitamos datos al usuario el API de java nos provee clases útiles para manejar estas situaciones.

Lo que les dejo aquí es un simple resumen de uno de los muchos puntos que se ven en el capitulo 3 de:



SCJP Study guide - Katy Sierra

Las clases envolventes tienen dos principales funciones en java:

  • Proveen un mecanismo para envolver (wrap) valores primitivos en un objeto, de esta manera los datos primitivos pueden tener actividades o comportamientos que son reservados solo para los objetos (como ser agregados a una colección o ser retornados de un método como simple Object).
  • Proveen útiles funciones para realizar conversiones: a cadena, cambiar de base numérica(octal, hexadecimal), u otros tipos primitivos.
  • Existe para cada tipo primitivo una clase envolvente, nombrada igual que su dato primitivo pero su nombre empieza con mayuzcula.

    Tabla de primitivos, envolventes y sus constructores:

    Primitive - Wrapper - Constructors
    boolean - Boolean - boolean or String
    byte - Byte - byte or String
    char - Character - char
    double - Double - double or String
    float - Float - float, double, or String
    int - Integer - int or String
    long - Long - long or String
    short - Short - short or String
    

    Para realizar conversiones podemos utilizar algunos métodos:

    • xxxValue()
    • parseXxx()
    • valueOf()
    • toString()

    xxxValue()
    Cuando se necesita el valor númerico de un envolvente a un primitivo podemos utilizar cualquiera de los muchos métodos xxxValue().

    Ejemplo:

            Integer var = new Integer(42);
           
            byte b = var.byteValue();
            short s = var.shortValue();
            double d = var.doubleValue();

    parseXxx() y valueOf()
    Ambos parseXxx() y valueOf() toman un String como argumento y arrojan NumberFormatException si la cadena no esta formada propiamente, y pueden convertir objetos String a diferentes bases numéricas (radix). La principal diferencia de estos métodos es:

    • parseXxx() - regresa el primitivo nombrado.
    • valueOf() - regresa un nuevo objeto wrapped del tipo del que fue invocado.

    Ejemplo:

            double d4 = Double.parseDouble("3.14");

            long L2 = Long.parseLong("101010", 2); // El resultado es 42
           
            Long L3 = Long.valueOf("101010", 2); // // El resultado es 42
           

    toString()
    la clase Object la clase principal de java contiene el método toString(). La idea de este método es obtener una representación significativa de un objeto dado. Este método nos regresa una cadena con el valor del primitivo envuelto en el objeto.

    Ejemplo:

             Double d = new Double("3.14");

            System.out.println("d = "+ d.toString() ); //El resuktado es: d = 3.14

    Comentarios

    Opciones de visualización de comentarios

    Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
    Imagen de ezamudio

    autoboxing

    También valdría la pena hablar de autoboxing, característica introducida en Java 5, donde se hacen conversiones "automágicas" entre por ejemplo int e Integer, long y Long, boolean y Boolean, etc...

    Imagen de davo

    autoboxing

    Si tienes toda la razón ... lo agregare en corto !!! gracias y Saludos

    Imagen de AlexSnake

    Cosas que uno desconoce

    Que buen tema.. siempre habia ocupado el el parse y el value pero no sabia la vdd diferencia.
    Buen post.

    Y cuando hables del autoboxing,menciona el cache que usa.

    Especificamente me refiero a esto:

    import static java.lang.System.out;
    class AutoboxingDemo {
      public static void main( String ... args ) {
        Integer i;
        Integer j;

        // prints true
        i = 127;
        j = Integer.valueOf(127);
        out.println( i == j );

        // prints false
        i = 128;
        j = Integer.valueOf(128);
        out.println( i == j );

      }
    }

    :)

    Cosas útiles, sencillas y

    Cosas útiles, sencillas y básicas cómo éstas deberían de usarse en las universidades. Concentrarse en este tipo de temas y no en "que IDE debe utilizar el alumno".

    Imagen de iberck

    en las universidades debe enseñarse a pensar/analizar

    Cosas útiles, sencillas y básicas cómo éstas deberían de usarse en las universidades
    ¿Qué de útil fácil tiene esto para enseñarse en las universidades?
    En mi opinión en las universidades debe enseñarse a estructurar/pensar/analizar/resolver y no a programar en algo específico, de otra forma se estaría formando programadores java y no académicos de alto nivel

    Imagen de bferro

    No es bueno generalizar

    ¿en qué universidad estudiaste que enseñan el IDE?. Haz referencia a ella y no a "las universidades".

    Re: No es bueno generalizar

    Pues dime en qué universidad se ven temas interesantes, necesarios y simples. Por acá todas las universidades se concentran en "hacer en ${ide} los siguientes ejercicios", no existe algo base, interesante y útil. Vamos de conocidos que tengo del ITESM, pasando por el Tecnológico, la autónoma, y la tecnológica. Y en todos lados veo que los profes que saben son pocos, pero cómo el plan educativo exige que se lleve (tal o cual) IDE y después los profes buenos se meten en problemas administrativos, y para evitar problemas "les dejo de tarea que hagan estos problemas en netbeans" (por ejemplo).

    Si tu conoces una escuela en donde enseñen patrones de diseño, temas cómo este y demás, dime para recomendarla a mis conocidos interesados en el rubro.

    Imagen de ezamudio

    IDE

    Será por eso que tanta gente pregunta aquí cómo hacer algo en un IDE en particular? Veo muchas preguntas muy básicas pero siempre mencionan el IDE, como si importara cuando en muchos casos no importa, porque no son "cómo construir una forma en Swing usando NetBeans/Eclipse/etc" sino más bien "cómo convertir una cadena a número en NetBeans" y cosas por el estilo.

    En cuanto al plan educativo... tristemente sí hay universidades donde alguna empresa "compra" al director de la carrera y con eso logran que se modifique el plan de estudios para que forzosamente haya que enseñar un lenguaje y/o plataforma, excluyendo todos los demás.

    Imagen de JaimeItlzc

    Dímelo ami

    Dímelo ami que yo paso por esa triste realidad que tengo que usar ahuevo JCreator por que al maestro lo impone y no se diga de base de datos MYSQL.

    Re: en las universidades debe enseñarse a pensar/analizar

    Claro, pero tienes que tene buenas bases en lo que te especializas (por ejemplo, a un contador le tienen que enseñar contabilidad. a un físico le tienen que enseñar física y así). No digo que se les enseñe cosas cómo "después de esta clase serán los especialistas más ching$%^% en Tapestry 5", no. Lo que digo es que se deberían enseñar cosas (en este caso en el área de software) útiles y base para el uso de cualquier tecnología (te aseguro que los wrappers no son algo exclusivo de Java) ¿o qué en las escuelas no se enseñan lenguajes de programación?.

    Y con lo que dices de "académicos de alto nivel", creo que francamente no vives en México. Para tener académicos de alto nivel, necesitas primero, instructores, guías y profesores de alto nivel. Yo sólo he tenido 2 profesores de nivel medio (con todo y que son masters y chalalala), ni hablar alguien que sepa de lo que habla y que además lo domine.

    Re: IDE

    Exactamente, es eso. Yo lo vivo diario, gente que me dice: "Oye, cómo mando un correo con NetBeans" y mi típica respuesta: "NetBeans no es outlook o thunderbird" XD. Y si tristemente, con los planes educativos pues el que se lleva las palmas es Microsoft, y por lo tanto la gente [aprende | le enseñan] mal y cree que las cosas las hace con Visual Studio, luego quieren "aprender Java" y te dicen: "hacer $cosa en netbeans".

    Re: Dímelo ami

    Yo creo que te ha pasado también el típico profe que dice cosas cómo: "Pues cuando creamos una clase Alumno hay que ponerle < < public > > al nombre en lugar de < < private > >, porqué después se batalla para obtener el nombre en la clase Alumno". O cosas cómo: "En java puedes heredar de varias clases" (¿de cuando acá la herencia multiple?) y choradas así, dejándolo a uno con la cara O_O.

    Imagen de bferro

    Conozco varias

    Conozco varias universidades donde realmente se enseña bien. No las menciono porque entonces puedo omitir algunas que no conozco y que también se enseña bien, y sería entonces injusto.
    Conozco esas universidades porque precisamente soy profesor universitario, entre otras actividades, y tengo muchos colegas valiosos que enseñan todas esas cosas que mencionas y mucho más.

    Es por eso que comentaba que no es bueno generalizar cuando no se tiene toda la información a la mano.

    Re: Conozco varias

    Pues, no me convences con eso de "no digo el nombre". Siendo que es "por mencionar unas pocas" del puñado de escuelas top-level existentes en México. Aunque cómo siempre alguien puede hablar de una cosa de la mejor manera, luego la pruebas, la experimentas y la comparas...y al final que es un churro!!

    Imagen de CybJer

    Conozco varias

    Pues no se si en las universidades/tecnologicos y demas lleven materias como: "Java","C#", "MySQL", donde estudie yo(TESJo), simplemente hay cursos como Programacion Orientada a Objetos, introduccion a la programacion, Bases de datos, Redes, etc.

    El limitarnos nosotros mismos por lo que el maestro sepa esta mal, "La escuela no hace al ingeniero", en mi caso, si al maestro se le antojaba que usaramos, vb6.0-access, php-mysql o java-oracle se debia entregar aunque el no supiera usar lo que pedia.

    No se aprende si no hay interes por parte del alumno, puedo creer hace unos 20 años que dijeran es que no aprendi porque el maestro, la universidad, la biblioteca, dinero o lo que se les antoje, sin embargo los alumnos modernos tenemos a nuestro alcance toda la informacion que podamos buscar, leer y comprender, (Bendito internet y todas las TI).

    Ahora lo de menos son la universidad y los profesores

    Re: Conozco varias by CybJer

    Es cierto lo del alumno, pero, el tener acceso a todo por el internet no siempre es la mejor manera de dar el kick-off y es de lejos una buena manera seguir un camino. Que para eso se supone que están las escuelas para mostrar un buen camino y regresamos a: ¿cómo será bueno el camino sin gente que haya si quiera puesto un pie en dicho camino?.

    O sea, no digo que tener de catedrático a Linus Torvalds o a Yukihiro Matsumoto. Pero pues al menos gente que te pueda decir: "ah lo que quieres saber se llama ${nombre}". O sea, ¿tu pagas la escuela para clavarte en internet?, yo creo que pagas la escuela para obtener una guía, no el conocimiento, sino las maneras de conseguirlo. Y volvemos: ¿cómo se enseña al alumno a conseguir conocimiento si llega a una clase y le dicen: "abramos el visual studio y vamos a crear un nuevo proyecto visual"?. De entrada ahí ya limitas al alumno a una plataforma y ya le das un manual paso a paso de cómo hacer las cosas; por eso es que al necesitar aprender otra cosa cómo no se les dió una guía indicada hacen preguntas que incluso no son de algo especializado (cómo bien dice @ezamudio, sumatorias, operaciones y cosas por el estilo).

    Y pues lo de menos es la universidad y los profes, entonces ¿para qué estudiar?. ¿Para tener una manera bien vista de gastar el dinero y tener un papel en la oficina?.

    Imagen de CybJer

    Solo mi punto de vista

    Pagué poco por ir a una escuela siempre fui a publicas y mientras estuve en ella me queje de lo malo de los maestros, lo malo de las instalaciones, lo malo de los planes de estudios (Que esperaba es publica) y ademas realmente intentaba cambiarlo tuve muchos problemas con los profesores, en varias ocaciones corregí lo que decían lo tomaban a mal, meti papeles argumentando lo estupido de un examen de Graficacion imagina preguntas como:
    1 Nombre completo del presidente de los estados unidos mexicanos
    2 Cuantos estados tiene la republica mexicana (Valia lo mismo si ponias 31 o 32)
    3 Menciona 3 formatos de imagen
    la verdad no recuerdo las demas (era de 10 preguntas) una respuesta era USB y otra Enrique Peña Nieto
    Hubo otro que me respondio: "Mira la verdad es que yo tengo mas kilometro nalga recorrida que tu"
    Y lo que aprendí de eso es que solo se aprende por uno mismo el profe y uni son lo de menos

    Las razones para estudiar hay de sobra pero continuando con la mayeutica:
    Si no eres familiar o conocido del patron:
    ¿Cómo conseguirías y mantendrías un empleo sin estudiar?, .
    Considero que la pregunta correcta seria:
    ¿Para que ir a la universidad?
    Respondiendo a la pregunta : ¿cuantas ofertas de trabajo dicen pasante o titulado? o ¿Dejarias que un estudiante de medicina trunco te operara?
    Simple se necesitan evidencias de que sabes y la manera de comprobarlo son los estudios respaldados por alguna universidad.
    Y coincido con el hecho de que internet no es siempre la manera de dar el "Kick-off", pero creo que es mejor estudiar investigar por nuestra cuenta que quejarse de lo mal que enseña la uni o que el maestro no sabe ni papa, el camino correcto lo definira la calidad de investigaciones que realizes (Yo le creeria mas a respuestas de ustedes aqui en JavaMexico que a una respuesta en un foro de Yahoo).
    Como bien afirmas necesitamos alguien o algo que nos guié, solo eso, porque si el profesor tampoco sabe el ${nombre} de lo que preguntas o si se equivoca en la respuesta, ¿porque quedarte con lo que dijo? hay que leer investigar entrar a internet y ver si tu profe esta en lo correcto porque el que de clases no lo vuelve un especialista en la materia.

    Afortunadamente en el aspecto de informática tenemos casi toda la información que podamos necesitar en internet, estoy seguro que hemos aprendido mas investigando que en salones de clases.
    Es todo por mi parte, no pretendo hacer otro show por diferencias de opinión

    Muy cierto

    Muy cierto lo que dices, esta en nosotros investigar, lo he dicho muchas veces y lo seguire diciendo. El problema es que muchos recien egresados que se ponen a dar clases, no tienen experiencia en el mercado, carecen de capacidad para analisis, diseno, codificacion, patrones de diseno, nunca se han tenido que enfrentar a grandes problemas. Y asi pues que podemos esperar de ellos.

    Saludos.

    style="display:inline-block;width:728px;height:90px"
    data-ad-client="ca-pub-5164839828746352"
    data-ad-slot="7563230308">