包装类(Wrapper Class)转_0&1_百度空间

Java 语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据 类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。

包装类均位于java.lang包,包装类和基本数据类型的对应关系如下:

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

在这八个类名中,除了Integer和Character类以外,其它六个类的类名和基本数据类型一致,只是类名的{dy}个字母大写即可。

对于包装类说,这些类的用途主要包含两种:

    a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。

    b、包含每种基本数据类型的相关属性如{zd0}值、最小值等,以及相关的操作方法。

JDK自从1.5(5.0)版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。请看如下代码片段:

//int类型会自动转换为Integer类型 int m = 12; Integer in = m; //Integer类型会自动转换为int类型 int n = in;

可见在实际使用时的类型转换将变得很简单,系统将自动实现对应的转换。

关于包装类的自动装箱与拆箱本文不作详细探讨,大家可以通过点击下面地址查看相关信息:

 

本文则主要介绍包装类与其他类的区别:
众所周知,“==”和“!=”运算符在比较2个数值型数据时,是比较它们值的大小,而在比较2个引用型数据时,则比较的是2个引用型变量是否指向同一块内存区域,即比较的是2者在内存中所在的地址。
“>”“>=”“<”“<=”是可以用来比较包装类对象的(Boolean类对象除外)。它比较的则不是包装类对象所指向内存中的地址,而是直接比较包装类的数据大小,下面来看一段代码:

  1. public class Test {  
  2.  public static void main(String[] args) {  
  3.   Integer a = new Integer(200);  
  4.   Integer b = new Integer(200);  
  5.   System.out.println("a == b:" + (a == b));  //false  
  6.   System.out.println("a != b:" + (a != b));  //true  
  7.   System.out.println("a <= b:" + (a <= b));  //true  
  8.   System.out.println("a >= b:" + (a >= b));  //true  
  9.   System.out.println("a < b:" + (a < b));  //false  
  10.   System.out.println("a > b:" + (a > b));  //false  
  11.  }  
  12. }  
public class Test { public static void main(String[] args) { Integer a = new Integer(200); Integer b = new Integer(200); System.out.println("a == b:" + (a == b)); //false System.out.println("a != b:" + (a != b)); //true System.out.println("a <= b:" + (a <= b)); //true System.out.println("a >= b:" + (a >= b)); //true System.out.println("a < b:" + (a < b)); //false System.out.println("a > b:" + (a > b)); //false } }

由结果不难看出包装类对象在进行比较运算时,“==”和“!=”不是比较数值大小而是比较内存地址值,而“>”“>=”“<”“<=”则是直接比较数值大小。

但是普通类的对象是不允许使用“>”“>=”“<”“<=”运算符来比较大小的,下面以String类为例:

  1. public class Test {  
  2.  public static void main(String[] args) {  
  3.   String a = new String("abc");  
  4.   String b = new String("abc");  
  5.   System.out.println("a == b:" + (a == b));  //false  
  6.   System.out.println("a != b:" + (a != b));  //true  
  7.   System.out.println("a <= b:" + (a <= b));  //编译报错  
  8.   System.out.println("a >= b:" + (a >= b));  //编译报错  
  9.   System.out.println("a < b:" + (a < b));  //编译报错  
  10.   System.out.println("a > b:" + (a > b));  //编译报错  
  11.  }  
  12. }  
public class Test { public static void main(String[] args) { String a = new String("abc"); String b = new String("abc"); System.out.println("a == b:" + (a == b)); //false System.out.println("a != b:" + (a != b)); //true System.out.println("a <= b:" + (a <= b)); //编译报错 System.out.println("a >= b:" + (a >= b)); //编译报错 System.out.println("a < b:" + (a < b)); //编译报错 System.out.println("a > b:" + (a > b)); //编译报错 } }

上述代码中,下面4行代码:
System.out.println("a <= b:" + (a <= b));
System.out.println("a >= b:" + (a >= b));
System.out.println("a < b:" + (a < b));
System.out.println("a > b:" + (a > b));
编译时是会报错的,错误信息如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The operator <= is undefined for the argument type(s) java.lang.String, java.lang.String
The operator >= is undefined for the argument type(s) java.lang.String, java.lang.String
The operator < is undefined for the argument type(s) java.lang.String, java.lang.String
The operator > is undefined for the argument type(s) java.lang.String, java.lang.String

另外,前面有提到Boolean类对象是不能使用“>”“>=”“<”“<=”作比较的,原因很简单,查看下Boolean和其他包装类的源代码:
Boolean类源代码:
public final class Boolean implements java.io.Serializable,Comparable<Boolean>

Integer类源代码:
public final class Integer extends Number implements Comparable<Integer>

不难发现Boolean类并没有继承Number类,而其他包装类是由Number类继承来的,所以Boolean类对象是不能使用“>”“>=”“<”“<=”作比较的。在这一点上Boolean类和其他普通类没有任何区别。



郑重声明:资讯 【包装类(Wrapper Class)转_0&1_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——