Java学习笔记5——基本类型与包装类

一、基本类型与包装类

Java的基本数据类型包括boolean、char、byte、short、int、float、long、double 8种。
其分别对应的包装类是:Boolean、Character、Byte、Short、Integer、Float、Long、Double类。


下面来分别介绍一下这些数据类型和对应的包装类。

1、布尔型(boolean和Boolean)

boolean只有两个对应的值,分别是true和false。用来判定逻辑条件。boolean型不能与其他类型的数据进行转换。

boolean flag1 = true;
boolean flag2 = false;

其对应的包装类为Boolean

其构造方法可以是用boolean类型作为参数,也可以传入字符串作为参数,当只有传入的字符串是“true”的时候,对应的值才是true。

Boolean a = new Boolean(true);  //true
Boolean b = new Boolean("true");    //true
Boolean c = new Boolean("1");   //false

当以boolean存入HashMap中时,是将boolean自动装箱成Boolean再存入,所以取值的时候需要强制转换为Boolean。

boolean a = true;
Map map = new HashMap();
map.put("a", a);
Boolean t1 = (Boolean) map.get(a);

Boolean类的成员方法包括了toString()、compareTo()、valueOf()、equals()、hashCode()、getBoolean()等方法,用法简单,此处不做描述。

2、字符型(char和Character)
char在定义时,需要用单引号作为引用。
(双引号为String类,单引号为char)
其对应的包装类为Character。Character中支持很多编码。但建议在程序中不适用此类型。

char a = 'a';
Character b = new Character('b');

(1)成员变量
static int MIN_RADIX :返回最小基数。
static int MAX_RADIX :返回最大基数。
static char MAX_VALUE :字符类型的最大值。
static char MIN_VALUE :字符类型的最小值。
static Class< Character > TYPE :返回当前类型。
类中还有很多成员变量,此处不做过多表述。

(2)方法
isDigit(char ch)、isDefined(char ch)、isLetter(char ch) 、getType(char ch)、toString()等等方法。
此处不做举例。

(3)转义字符
前面有反斜杠(\)的字符代表转义字符,它对编译器来说是有特殊含义的。
\t - 在文中该处插入一个tab键
\b - 在文中该处插入一个后退键
\n - 在文中该处换行
\r - 在文中该处插入回车
\f - 在文中该处插入换页符
\’ - 在文中该处插入单引号
\” - 在文中该处插入双引号
\ - 在文中该处插入反斜杠

3、整型
整型中对应的包装类均存在 将部分其他类型的数据转换为本类型的数据的方法。即valueOf、parseXXX方法可以将字符串形式的值装换为数字。

例子:

//对String类型的转换
int a = Integer.parseInt("666");
//int类型
int b = Integer.valueOf(666);
//String类型
int c = Integer.valueOf("666");

(1)byte和Byte
byte主要用于特定应用场合,如I/O操作中的输入输出流。
取值范围是-128-127(即-2^7 ~ 2^7-1)。
存储需求为1字节(8位)。
其对应的包装类是Byte。

(2)short和Short
short类型也是主要用于特定的应用场合。
取值范围是 -32 768~32 767(-2^15 ~ 2^15-1)。
存储需求为2个字节(16位)。
其对应的包装类是Short。

(3)int和Integer
int类型最常用。
取值范围是-2^31~2^31-1
存储需求为4个字节(32位)。
其对应的包装类是Integer。

(4)long和Long
long属于长整型。在赋值时使用后缀 L(如40000000000L)。
取值范围是 -2^63 ~ 2^63-1
存储要求是8个字节(64位)
其对应的包装类是Long。

4、浮点型

(1)float和Float
float的数值有后缀F(如3.14F),没有后缀F的默认为double类型。
取值范围有效数字为6-7位
其存储需求为4字节。
其对应的包装类是Float。

(2)double和Double
double的数值精度是float类型的两倍。也有人称之为双精度。绝大部分情况都是使用double作为浮点型数据类型。
取值范围有效数字为6-7位
其存储需求为4字节。
其对应的包装类是Double。

5、自动装箱和拆箱
装箱:自动将基本数据类型转换为其对应的包装类.
拆箱:自动将包装类型转换为基本数据类型.

包装类与基本数据类型之间可以实现数据类型的自动转换,即装箱和拆箱。

二、数据类型之间的转换

boolean型不能与其他类型的数据进行转换,否则会出错。
基本数据类型的级别从低到高如下:
byte < char < short < int < long < float < double
级别低到级别高的(从左到右)类型自动转换(隐式转换)。
级别高到级别低的(从右到左)类型需要强制类型转换。
整型向浮点型转换时,可能会有精度损失的转换。

byte a1 = 1;
//byte a2 = 1.0;    //1.0属于double类型,需要强转
byte a2 = (byte) 1.0;

short b1 = 1;
//short b2 = 1.0; //1.0属于double类型,需要强转
short b2 = (short) 1.0;

int c1 = 1;
//int c2 = 1.0; //1.0属于double类型,需要强转
int c2 = (int) 1.0;

long d1 = 1;    //1属于int类型,自动转换,不需要强转
long d2 = 1L;   //1L表示long类型
//long d3 = 1.0;    //1.0属于double类型,需要强转
long d3 = (long) 1.0;

float e1 = 1.0f;    //1.0f表示float类型
float e2 = 1;   //1属于int类型,自动转换,不需要强转
float e3 = 1L;  //1L表示long类型,自动转换
//float e4 = 1.0;   //1.0属于double类型,需要强转
float e4 = (float) 1.0;

//double的级别最高,全都是自动转换类型。
double f1 = 1;
double f2 = 1.0;
double f3 = 1L;     
double f4 = 1.0f;

另外一个是参与计算时的转换。byte、char、short的数据在参与运算时会自动转换为int。

byte a = 1;
short b = 2;
char c = 3;
System.out.println(a+b+c);

上面的结果是6。

但在使用“+=”运算时,就不会发生类型转换。

byte a = 1;
//a = a + 1;    //编译出错
a = (byte) (a+1);
a += 1;

上述的编译出错是因为 a+1 时,已经把a隐式转换为int类型,计算后的结果为int,需要强制转换为byte之后才能赋值。
short、char类型也同理。

还有另一个问题,就是级别高的往级别低的转换的时候的溢出问题。

short a = 128;
byte b = (byte) a;
System.out.println(a);
System.out.println(b);

上面的结果是:a = 128 ; b = -128
在Java中正数用源码表示,负数用补码表示,第一位是符号位。a的编码是:0000 0000 0000 0000 0000 0000 1000 0000,而强转为byte之后,只取byte的最大范围值,就是1000 0000,1000 0000是负数(第一位为1),所以是-128。


在一开始,我没注重基本类型的转换,在这里摔了一跤。趁机补回来吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值