目录:
- java中的数据类型
- 包装类
- 装箱与拆箱
正文:
1. java中的数据类型
四类八种:
原生类型 (Primitive Types):
byte short int long
double float char boolean
其中,
整数 byte short int long
浮点数 double float
字符 char (Unicode码,16-bit)
布尔值 boolean
参考网址:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
2. 包装类Wrapper Class
在java.lang.*下有8个类:
Byte Short Integer Long
Double Float
Character
Boolean
注意:它们是class类型,都是Object的子类
把它们叫做包装类,是对原生类型做了简单的包装。
包装是什么意思?(模仿着写一个包装类, 实际你可以查看jdk的源码)
为什么要提供Wrapper class?直接用原生类型不行吗?class AfInteger { private int value; public AfInteger(int v) { this.value = v; } int intValue() { return this.value; } }
:有些地方要求必须用一个Object类型
比如,
ArrayList<Integer>
Hashmap<Integer, Student>
由于模板类要求传入Object类型,不能用int,所以提供一个包装类Integer
注意:
1. Java里没有“重载操作符"的语法
我们自己写的类是不能这么自动转换的。
2. 只有原生类型primitive types和它们对应的包装类Wrap classes之间支持。
3. 这是编译器特别加的东西,是Java语法的 特例(特殊定义的)
3.装箱拆箱
以int和Integer的转换为例:
1. int -> Integer (称为装箱: boxing )
int nn = 123;
Integer aa = new Integer(nn);
2. Integer -> int ( 称为拆箱: unboxing )
int vv = aa.intValue();
int nn = 123;
Integer aa = nn;
编译器自动创建了一个new Integer(nn)对象,称为自动装箱 auto-boxing
Integer aa = new Integer(100);
int vv = aa;
编译器自动取出aa的值,称为自动拆箱auto-unboxing。
http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
又如,
void test(int a) { } void what() { Integer a = new Integer(123); test(a); }
函数参数类型要求的是int,但我们传入一个Integer也是可以的。。。虽然类型不匹配,但编译器会帮我们自动拆箱。
反之,如果参数要求Integer类型,我们传入一个int也行。。。
void test(int a)
{
}
void what()
{
Integer a = new Integer(123);
test(a);
}
总结:
包装类, 它们是为了弥补Java的语法缺陷而产生的,是编译器特别添加的特性。
java支持自动装箱拆箱, 所以包装类用起来和基本数据类型没有什么区别,
包装类中提供很多有用的方法, 需要深入学习(看文档).(例如getByte("charActerSetEncoding"), 以及一些构造方法, 很有用的)
java有了包装类就可以说"万物皆对象了", 包装类中很多方法,具体看文档, java支持自动装箱拆箱.
好像没啥可以讲的了......emmmm, 学习编程有项重要的能力掌握了可以开始提升自己, 看文档, 最了解某种东西的人一定是它的制造者, 而官方文档就是制造者写给用户看的, 比视频教程讲的都详细正确. 但是, 大多数文档都是英文的, 这很尴尬, 不过所幸, jdk有中文文档, 在开源中国社区上....
好希望有个小姐姐来带领我学英语...........(羞涩)