java 包装器特性 和及其对象创建特性
来源:互联网 发布:壁纸知乎 编辑:程序博客网 时间:2024/06/08 06:12
java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元.但在java中不能定义基本类型 (primitive type),为了能将基本类型视为对象来处理,并能连接相关的方法,java为每个基本类型都提供了包装类,这样,我们便可以把这些基本类型转化为对象来 处理了.这些包装类有:Boolean,Byte,Short,Character,Integer,Long,Float,Double,Void共9 个(注意:Date不是,无其基本类型).
一、 包装类(Wrapper Class)共同的方法
值得说明的是,java是可以直接处理基本类型的,但是在有些情况下我们需要将其作为对象来处理,这时就需要将其转化为包装类了.所有的包装类(Wrapper Class)都有共同的方法,他们是:
(1)带有基本值参数并创建包装类对象的构造函数.如可以利用Integer包装类创建对象,Integer obj=new Integer(145);
(2)带有字符串参数并创建包装类对象的构造函数.如new Integer("-45.36");
(3)可生成对象基本值的typue方法,如obj.intValue();
(4)将字符串转换为基本值的 parseType方法,如Integer.parseInt(args[0]);
(5)生成哈稀表代码的hashCode方法,如obj.hasCode();
(6)对同一个类的两个对象进行比较的equals()方法,如obj1.eauqls(obj2);
(7)生成字符串表示法的toString()方法,如obj.toString().
转换关系:
基本类型------>包装器类
Integer obj=new Integer(145);
包装器类------>基本类型
int num=obj.intValue();
字符串------>包装器类
Integer obj=new Integer("-45.36");
包装器类------>字符串包装器类
String str=obj.toString();
字符串------>基本类型
int num=Integer.parseInt("-45.36");
基本类型------>字符串包装器类
String str=String.valueOf(5);
在一定的场合,运用java包装类来解决问题,能大大提高编程效率.
二、JDK1.5的新特性:自动装包/拆包(Autoboxing/unboxing)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
我知道原因了,查到个资料:
Integer i1 = 10;
Integer i2 = 10;
System.out.println(i1 == i2);
Integer a1 = 128;
Integer a2 = 128;
System.out.println(a1 == a2);
打印结果是true和false,至于为什么看了Integer源代码后就能明白,Integer有个内部类IntegerCache,它维护了一个Integer数组cache[] ,长度为256,还有一个静态块
static {
for(int i = 0; i < cache.length; i++)
cache = new Integer(i - 128);
}
很明显这个静态块已经默认认创建出了-128~127 的 Integer 数据,这也是JAVA出于性能考虑。
至于上面的代码经过编译后就变成了
Integer i1 = Integer.valueOf(10);
Integer i2 = Integer.valueOf(10);
System.out.println(i1 == i2);
Integer a1 = Integer.valueOf(128)
Integer a2 = Integer.valueOf(128)
System.out.println(a1 == a2);
看看Integer的valueOf方法,若是在-128到127之间的数,它会直接数据引用,因为它已经创建了数据对象,但若超出这个范围,它就new了一个Integer对象。所以值为128时,每次都是不同的对象。
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
根据上面的推测,i1=5, i2=i1时做的是赋值操作
又假如 i1=128, i2=i1, i1=129, 那它们此时又各自new了对象,各自引用又不同
若i1=5, i2=i1, i1=128,i1又创建了自己的对象,各自引用又不同
- java 包装器特性 和及其对象创建特性
- 黑马程序员——java编程那些事儿____基本数据类型对象包装类及其jdk1.5新特性
- java面向对象及其特性初探
- Java 面向对象及其三大特性
- JAVA 基本数据类型对象包装类新特性
- java面向对象高级特性-4.1基本类型包装类
- Java过滤器及其特性
- 基本数据类型对象包装类新特性
- Java面向对象思想及其三大特性
- JDK5.0后的包装类对象池和String对象池新特性
- java基础----面向对象特性和原则
- Java面向对象和三大特性
- java 面向对象 和 四大特性
- Java面向对象特性
- Java面向对象特性
- Java面向对象特性
- Java面向对象特性
- Java面向对象特性
- WINCE 的API大全
- JSON指南
- Oracle SQL语句操作数字:取整、四舍五入及格式化
- Struts2配置
- 纹理映射中的双线性插值
- java 包装器特性 和及其对象创建特性
- 安装SCIM
- 什么是ARM?----硬件平台
- 自定义GridView分页模板
- ●●教你如何在鼠标右键中添加excel,word,ppt的快捷方式
- Mathematics for Computer Graphics
- RationalRose 2003 破解
- (转)为一套房子你要奋斗多少年?
- logic标签序号应用