zoukankan      html  css  js  c++  java
  • Java基本数据类型与包装类型(转)

    基本数据类型的包装类

    为什么需要包装类? 

    Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中,这是,我们就需要将基本类型数据转化为对象。

    包装类均位于java.lang包,使用时不需要导入,系统自动导入。Java中的8个包装类分别是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。

    包装类和基本数据类型的对象关系:

    基本类型  包装器类型
    boolean Boolean
    char Character
    int Integer
    byte Byte
    short Short
    long Long
    float Float
    double Double

    如何使用包装类?

    包装类的作用:

    • 提供:字符串、基本数据类型、对象之间互相转化的方式!
    • 包含每种基本数据类型的相关属性,如:最大值、最小值等

    由于八个包装类的使用比较类似,下面以最常用的Integer类为例子介绍包装类的实际使用。Integer类继承Number父类。

    1、实现int和Integer类之间的转换(该过程中使用了自动装箱和自动拆箱的原理)

    在实际转换时,使用Integer类的构造方法和Integer类内部的intValue方法实现这些类型之间的相互转换,实现的代码如下:

    int n = 10;
    Integer in = new Integer(100);
    //将int类型转换为Integer类型
    Integer in1 = new Integer(n);
    //将Integer类型的对象转换为int类型
    int m = in.intValue();

    2、Integer类内部的常用方法

    在Integer类内部包含了一些和int操作有关的方法,下面介绍一些比较常用的方法:

    a、parseInt方法

    public static int parseInt(String s)

    该方法的作用是将数字字符串转换为int数值。在以后的界面编程中,将字符串转换为对应的int数字是一种比较常见的操作。使用示例如下:

    String s = “123”;
    int n = Integer.parseInt(s);

    则int变量n的值是123,该方法实际上实现了字符串和int之间的转换,如果字符串都包含的不是都是数字字符,则程序执行将出现异常。

    另外一个parseInt方法:

    public static int parseInt(String s, int radix)

    则实现将字符串按照参数radix指定的进制转换为int,使用示例如下:

    //将字符串”120”按照十进制转换为int,则结果为120
    int n = Integer.parseInt(“120”,10);
    //将字符串”12”按照十六进制转换为int,则结果为18
    int n = Integer.parseInt(“12”,16);
    //将字符串”ff”按照十六进制转换为int,则结果为255
    int n = Integer.parseInt(“ff”,16);

    这样可以实现更灵活的转换。

    b、toString方法

    public static String toString(int i)

    该方法的作用是将int类型转换为对应的String类型。

    使用示例代码如下:

    int m = 1000;
    String s = Integer.toString(m);
    //则字符串s的值是”1000”。

    在进行包装类与基本数据类型之间进行数值之间的转化时,我们经常使用的自动装箱和自动拆箱。这是JDK5.0的新增的特性。

    自动装箱和自动拆箱(auto-boxing & auto-unboxing)

    JDK5.0的一个新特性是自动装箱和自动拆箱。

    自动装箱

    • 基本类型就自动地封装到与它相似类型的包装中,如:Integer i = 100;
    • 本质上是,编译器编译时自动添加:Integer i = new Integer(100);

     自动拆箱

    • 包装类对象自动转换成基本数据类型。如:int a = new Integer(100);
    • 本质是上,编译器编译时自动添加:int a = new Integer(100).intValue();

    在Integer类中自动装箱和自动拆箱问题中遇到的问题:

    Integer  d = 1234;
    Integer  d2 = 1234;
            
    System.out.println(d==d2);
    System.out.println(d.equals(d2));
            
    System.out.println("###################"); 
    Integer d3 = -100;    // [-128,127]之间的数,仍然当做基本数据类型来处理。
    Integer d4 = -100;
    System.out.println(d3==d4);
    System.out.println(d3.equals(d4));

    显示结果:

    false
    true
    ###################
    true
    true

    当两个数都是100的时候==判断相等,当两个数都是200的时候判断不相等。

    原因:查看内部实现代码可知,Integer类有一个缓存问题,它会缓存-128~127之间的整数。也就是说如果将-128~127之间的数值赋值给Integer类对象,在比较两个对象(d3==d4)时比较的是两个对象的数值。超过这个范围比较的是对象的内存地址。

    参考:

    http://www.mamicode.com/info-detail-1015549.html

    http://www.jobui.com/mianshiti/it/java/7088/

    http://cakin24.iteye.com/blog/2326545

    http://lib.csdn.net/article/javase/2159(以上内容转自此篇文章)

    http://www.cnblogs.com/mengdd/archive/2013/01/21/2869921.html

    http://www.jianshu.com/p/5d7c9b077771

    http://www.cnblogs.com/huajiezh/p/5225637.html

    http://www.cnblogs.com/xianzheng/p/5205968.html

  • 相关阅读:
    luogu题解 P2184 【贪婪大陆】
    luogu题解 P3763 【[TJOI2017]DNA】
    实战技巧--对拍
    题解 P3620 【[APIO/CTSC 2007]数据备份】
    题解 UVA1316 【Supermarket】
    学习笔记-Rabin-Karp哈希
    题解 POJ1964/UVA1330/SP277 【City Game】
    题解 POJ 2559-SP1805 【HISTOGRA
    题解 P2859 【[USACO06FEB]摊位预订Stall Reservations】
    Linux操作系统(一)
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7769224.html
Copyright © 2011-2022 走看看