Java面向对象(下):Java是面向对象的编程语言,一切皆对象,但是它也包含了8种基本数据类型,这些基本类型不具备对象的特性:没有成员变量和成员方法可供调用。Java之所以提供这8种基本类型,主要是为了照顾程序员的传统习惯。
基本类型简单高效,但是也会有一些限制,例如所有引用类型都继承了Object类,都可以当做Object类型变量使用。但基本数据类型的变量就不可以,如果有方法需要传入Object类型的参数,但实际传入的却是2、3等数值,则难以处理。
为了解决8种基本数据类型的变量不能当作Object类型变量使用的问题,Java提出了包装类的概念。为8种基本数据类型分别定义了相应的引用类型,并成为基本数据类型的包装类。
基本数据类型包装类byteByteshortShortint
Integerchar
CharacterfloatFloatdoubleDoublebooleanBoolean
基本类型包装成包装类实例是通过对应包装类的构造器来实现的。
基本类型转包装类对象
Integer itObj = new Integer(it);
包装类对象转基本类型
int i = itObj.intValue();
转换很繁琐,JDK 1.5提供了自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能。
自动装箱就是可以把一个基本类型变量直接赋值给对应的包装类变量,或者赋值给Object变量。
自动拆箱则允许直接把包装类对象直接赋值给一个对应的基本类型变量。
Integer inObj = 5;
int it = inObj;
自动拆箱和自动装箱时必须注意类型匹配,例如Integer只能自动拆箱成int类型变量,不要试图拆箱成boolean类型变量。
除此之外,包装类还可以实现基本类型变量和字符串之间的转换。把字符串类型的值转换为基本类型的值有两种方式:
利用包装类提供的parseXXX(String s)静态方法,除了Character之外的所有包装类都提供了这个方法 利用包装类提供的Xxx(String s)构造器。
基本类型变量String.valueOf()转换为String对象,也可以+””
String对象WrapperClass.parseXxx()方法或利用包装类的构造器转换为基本类型变量
注意,虽然包装类型的变量是引用数据类型,但包装类的实例可以与数值类型的值进行比较,这种比较是直接去除包装类实例所包装的数值来进行比较的。
Integer a = new Integer(6);
Syso(a > 5.0); //true
两个包装类的实例进行比较,则比较复杂,因为包装类的实例实际上是引用类型,只有两个包装类引用指向同一个对象时才会返回true。
syso(new Integer(2) == new Integer(2));
还有一种复杂的情况
Integer ina = 2;
Integer inb = 2;
syso(ina == inb); //true,说明ina和inb的地址一致
Integer biga = 128;
Integer bigb = 128;
syso(biga == bigb); //false
这是因为系统把-128~127之间的证书自动装箱成Integer实例,并放在数组中缓存起来了,以后只要在这个范围内的自动装箱,直接指向数组中的对应元素,所以ina和inb指向同一个元素。不在这个范围的,要重新创建一个Integer实例。
Java7增强了包装类的功能,为所有的包装类提供了一个静态的compare(xxx val1, xxxval2)方法,可以通过它来比较两个基本类型值的大小,比较boolean时,true>false。
就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
来源: