基本数据类型的包装类html
为何须要包装类? java
Java并非纯面向对象的语言。Java语言是一个面向对象的语言,可是Java的基本数据类型却不是面向对象的。可是咱们在实际使用中常常须要将基本数据转化成对象,便于操做。好比:集合的操做中,这是,咱们就须要将基本类型数据转化为对象。编程
包装类均位于java.lang包,使用时不须要导入,系统自动导入。Java中的8个包装类分别是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它们的使用方式都是同样的,能够实现原生数据类型与包装类型的双向转换。缓存
包装类和基本数据类型的对象关系:ui
基本类型 | 包装器类型 |
boolean | Boolean |
char | Character |
int | Integer |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
如何使用包装类?spa
包装类的做用:.net
因为八个包装类的使用比较相似,下面以最经常使用的Integer类为例子介绍包装类的实际使用。Integer类继承Number父类。code
一、实现int和Integer类之间的转换(该过程当中使用了自动装箱和自动拆箱的原理)htm
在实际转换时,使用Integer类的构造方法和Integer类内部的intValue方法实现这些类型之间的相互转换,实现的代码以下:对象
int n = 10; Integer in = new Integer(100); //将int类型转换为Integer类型 Integer in1 = new Integer(n); //将Integer类型的对象转换为int类型 int m = in.intValue();
二、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类中自动装箱和自动拆箱问题中遇到的问题:
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