16、java包装类
2015-03-30 12:36
267 查看
一、包装类的由来:
JAVA是面向对象的编程语言,但它也包含了8种基本数据类型,这8个基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有属性,方法可以被调用。JAVA之所以提供这8种基本数据类型,主要是为了照顾程序员的传统的习惯。
如果没有包装了,那么使用基本的算术运算将非常麻烦,比如说计算一个1+2=3的运算
明显使用第二种方式简单方便的多。所以JAVA为了保留正在编程方式,就保留了这8中基本数据类型。但在某些时候,基本数据类型就有一些制约,例如所有引用类型的变量都继承了Object类,都可以当成Object类型变量使用。但基本数据类型的变量就不可以,如果有个方法需要Object类型的参数,但实际需要的值却是2,3等,这可能就比较难以处理。
为了解决8个基本数据类型的变量不能当成Object类型变量使用的问题,JAVA提供了包装类的概念,为了8个基本数据类型分别定义了相应的引用类型。
二、基本数据类型和包装类的对应关系
8个包装类,除了Character外,其它都可以通过传递一个字符串来构建,例如:Integer a=new Integer("123")
【特别注意】:如果构建对象为Character时,当传入字符串为true时(不区分大小写),都会创建true对应关系的Character对象,否则将创建false对应关系的Character对象
如 :new Charater("trUE")——true new Character("a23")——flase
三、类型转换
1、包装类和基本数据类型转换
2、基本数据类型和String之间转换
四、基本类型和包装类占用空间对比
这里申明两个变量
下图展示n1和n2在内存中的结构
通过下面的方式计算后,在将Double类型改成double类型,对比后,可以发现,使用Double类型所暂用的空间多些
JAVA是面向对象的编程语言,但它也包含了8种基本数据类型,这8个基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有属性,方法可以被调用。JAVA之所以提供这8种基本数据类型,主要是为了照顾程序员的传统的习惯。
如果没有包装了,那么使用基本的算术运算将非常麻烦,比如说计算一个1+2=3的运算
//第一种方式使用面向对象的方式 Integer a=new Integer(1); Integer b=new Integer(2); //当然如果不支持基本数据类型运算,可能会增加一个add方法如下 nteger c=Integer.add(a,b); //第二种方式使用基本数据类型方式 int c=1+2;
明显使用第二种方式简单方便的多。所以JAVA为了保留正在编程方式,就保留了这8中基本数据类型。但在某些时候,基本数据类型就有一些制约,例如所有引用类型的变量都继承了Object类,都可以当成Object类型变量使用。但基本数据类型的变量就不可以,如果有个方法需要Object类型的参数,但实际需要的值却是2,3等,这可能就比较难以处理。
为了解决8个基本数据类型的变量不能当成Object类型变量使用的问题,JAVA提供了包装类的概念,为了8个基本数据类型分别定义了相应的引用类型。
二、基本数据类型和包装类的对应关系
基本数量类型 | 包装类 | 继承父类 |
byte | Byte | java.lang.Number |
short | Short | java.lang.Number |
int | Integer | java.lang.Number |
long | Long | java.lang.Number |
float | Float | java.lang.Number |
double | Double | java.lang.Number |
boolean | Boolean | java.lang.Object |
char | Character | java.lang.Object |
【特别注意】:如果构建对象为Character时,当传入字符串为true时(不区分大小写),都会创建true对应关系的Character对象,否则将创建false对应关系的Character对象
如 :new Charater("trUE")——true new Character("a23")——flase
三、类型转换
1、包装类和基本数据类型转换
2、基本数据类型和String之间转换
四、基本类型和包装类占用空间对比
这里申明两个变量
int n1 = 100; Integer n2 = new Integer(100);
下图展示n1和n2在内存中的结构
通过下面的方式计算后,在将Double类型改成double类型,对比后,可以发现,使用Double类型所暂用的空间多些
public static long getBytesUsingPrimitives(int n) { System.gc(); // force garbage collection long memStart = Runtime.getRuntime().freeMemory(); Double[][] a = new Double ; // put some random values in the matrix for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) a[i][j] = Math.random(); } long memEnd = Runtime.getRuntime().freeMemory(); return memStart - memEnd; }
相关文章推荐
- 16、StringBuffer类与包装类、java数组
- 【JavaWeb-16】静态参数封装、3种动态参数封装、数据类型转换、struts标签、验证器
- Long.ValueOf("String") Long.parseLong("String") 区别 看JAVA包装类的封箱与拆箱
- Java与Flex学习笔记(16)---Red5流媒体服务器的安装与测试
- java.net.BindException: 无法指定被请求的地址: Service 'sparkDriver' failed after 16 retries!
- Java学习--Java 中的包装类
- [零基础学JAVA]Java SE面向对象部分-16.面向对象高级(04) 推荐
- 黑马程序员_java-基本数据类型的对象包装类-Math类-Random类-Scanner类<六>
- java-16(3)-Map集合
- Java 集合Map --16
- Java(十四)——Java的包装类
- Java字符串与包装类
- Java中的包装类
- Java各大基本类型包装类的字面量揭秘
- java基本数据类型与包装类之间的转换
- 我被Java包装类教育了(Long和Integer)
- 课程 Java Web程序设计16: 用web.xml控制Web应用的行为
- JAVA笔记8__内部类/链表的实现/包装类、享元设计模式/包、访问修饰符
- JAVA包装类的缓存范围
- GB18000的UCS-2编码即是java中的utf-16BL编码