基本数据类型
数据类型 | 关键字 | 取值范围 | 默认值 | 占用内存(单位:字节) |
---|---|---|---|---|
整型 | byte | -128(-2^7) ~ 127(2^7-1) | 0 | 1 |
short | -32768(-2^15) ~ 32767(2^15-1) | 0 | 2 | |
int | -2147483648(-2^31) ~ 2147483647(2^31-1) | 0 | 4 | |
long | -9223372036854775808(-2^63) ~ 9223372036854775807(2^63-1) | 0L | 8 | |
浮点型 | float | -3.401298e-38 ~ 3.402823e+38 | 0.0f | 4 |
double | 4.9000000e-324 ~ 1.797693e+308 | 0.0d | 8 | |
字符型 | char | 0-65535 | 'u0000' | 2 |
布尔型 | boolean | true或false | false | 1 |
引用数据类型
基本概念:
引用数据类型建立在八大基本数据类型基础之上,它包括了包括数组、接口、类。除了八大类型以外的所有数据类型都是引用类型。
某些情况的说明:
包装数据类型也是引用类型,在Java中,包装类是一种特殊的类,用于将基本数据类型转换为对象。既然是类(即便它特殊),那自然也是引用类型。下面是java中的包装数据类型:
基本数据类型 | 对应的包装数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
对于上面的表,不难发现,基本数据类型首字母小写,包装数据类型的首字母是大写的。包装数据类型的首字母之所以是大写,是因为它们都是Java中的类,而根据Java的命名规范,类的名称首字母需要大写。所以可以通过首字母是否大写来区分它和基本数据类型(区分部分单词相同但是含义不同的数据类型)。当然这也就说明了java是严格区分大小写的,要不然这数据类型不就乱套了。
而对于String,不难发现它其实也是一个类,所以它也是一个引用类型。
数据类型转换
在Java中,数据类型转换主要分为两种:自动类型转换(也称为隐式类型转换)和强制类型转换(也称为显式类型转换)。
下面介绍这两种转换方式:
自动类型转换(隐式类型转换)
/* 整型之间的转换,从低级到高级因为范围兼容,不会发生数据丢失,所以java会进行自动转换。 */
byte b = 10; // 范围最小的整数
short s = b; // 自动类型转换,byte到short
int i = b; // 自动类型转换,byte到int
long l = i; // 自动类型转换,int到long
/* 浮点型之间的转换,从低级到高级可以自动转换 */
float f = l; // 自动类型转换,long到float
double d = f; // 自动类型转换,float到double
和强制类型转换(显式类型转换)
/* 整型之间的转换,由于从高级到低级转换可能会丢失数据,所以Java要求显式地进行转。 */
double d = 3.24; //先定义一个高级数据类型
float f = (float) d; // 强制类型转换,double到float
int i = (int) d; // 强制类型转换,double到int,可能会丢失小数部分
byte b = (byte) i; // 强制类型转换,int到byte,可能会溢出
从高级到低级可以使用双括号()
内部写基本数据类型,进行由上到下的转换,当然转换过程中当心数据丢失,因为java不会因为强制转换类型中的数据丢失而报错。
举个例子:
例如:我先声明一个int
类型的数据,然后给他赋值为300。之后将它强转为byte
类型,由于byte的取值范围是-128(-2^7) ~ 127(2^7-1),所以肯定会发生数据丢失,而java会对它进行取模运算(即为求余),将300对256(byte类型的长度)取模后的结果给到byte。
而java也通过这种手段来解决强转类型时候可能会出现的错误。
int i = 300;
byte b = (byte) i; // b的值将是44,因为300对256取模的结果是44
补充一点
在java中char其实也可以转化为int类型,这是由于java中char
类型本质上是一个小的整数类型,至于怎么进行转换,那就要参考ASCII码表了。这一点可能会在算数运算的时候用到。
编写不易,如有问题请指出,还望各位多多支持。