数据的存储单位
- bit : 位
一个位能表示0和1两种状态,是计算机中最小的单位
- byte:字节
1 byte = 8 bit,计算机中通常使用byte代替bit作为单位
数据类型
-
基本数据类型
- 数值型
- 整型 (byte, short, int, long)
- 浮点型 (float, double)
- 字符型 (char)
- 布尔型 (boolean)
- 数值型
-
引用数据类型
- 类 (class)
- 接口 (interface)
- 数组 (array)
整数类型
-
Java中整型有4种,表示的长度固定,不受具体的操作系统的影响,保证其跨平台能力
-
Java中整数的表现形式
- 十进制
-
八进制 要求以数字0开头(不是字母O), 如:0456
- 十六进制 要求以0x开头(不是字母O), 如:0x123
-
Java中默认的整数类型为
int
- 因此需要注意的是,声明long类型的变量时必须在后面加上一个
l
或者L
- 下面代码会报错,实际上是类型转换的问题,因为128默认是
int
类型,这里需要强制类型转换byte b = 128;
- 因此需要注意的是,声明long类型的变量时必须在后面加上一个
-
Java中整型的表示范围
类型 | 占用存储空间 | 表示范围 |
---|---|---|
byte | 1byte | -2^7~2^7-1 |
short | 2byte | -2^15~2^15-1 |
int | 4byte | -2^31~2^31-1 |
long | 8byte | -2^63~2^63-1 |
浮点数类型
-
Java中浮点型型有2种,表示的长度固定,不受具体的操作系统的影响,保证其跨平台能力
-
Java中浮点类型的表示方式:
-
十进制计数 如3.1415926
-
科学计数法 如3.14e2, -3.14E-2
-
- Java中默认的浮点数类型为
double
- 因此需要注意的是,声明float类型的变量时必须在后面加上一个
f
或者F
- 下列写法是否不同?
float f1 = 12.345f; float f2 = (float)12.345;
- 因此需要注意的是,声明float类型的变量时必须在后面加上一个
- Java中浮点型的表示范围
类型 | 占用存储空间 | 表示范围 |
---|---|---|
float | 4byte | -3.403E38~3.403E38 |
double | 8byte | -1.798E308~1.798E308 |
字符类型
- 字符类型是用’‘单引号扩起来的单个字符,如
char c = 'A'
- Java中的字符编码采用
unicode
编码,每个字符占2个字节
,因此可以使用16进制编码表示,如char c = '\0041'('A')
- Java中允许使用转义字符’'将后面的字符转换成其他含义,如
‘\n’
表示换行
布尔类型
- boolean的取值只能为
true
或者false
- boolean类型不可以和其他类型的数据进行转换,即不可以用非零的值表示`true。
下面这种写法在C语言中可行,而在Java中并不成立:
while(1){
//do sth
}
数据类型之间的转换
-
boolean类型不能和其他数据类型进行转换
-
整数型、浮点型和字符型之间转换遵循下面的标准
- 容量小的自动向容量大的类型转换(
向上转型
,自动完成) - 容量小于
int
类型的数据类型在计算时先转换成int
类型 - 多种类型进行计算时,先转换成最大的类型再计算
- 大容量的数据类型向小容量的数据类型转换时,必须使用
强制类型转换
此过程可能导致精度丢失或者数据溢出问题(向下转型
,不安全)
- 容量小的自动向容量大的类型转换(
大数
一旦数据的大小足够大,达到超过Java提供的基本数据类型的容纳范围,我们就需要使用大数来满足我们的需求
- BigInteger(超过了long能够容纳的大小)
BigInteger bi = new BigInteger("234234345985690468464098708709450974957856756756755...");
- BigDecimal(超过了double能够容纳的大小)
BigDecimal bd = new BigDecimal("3.1415926893485893658762893764982345353453453453453...");
基本数据类型对应的包装类
对应关系如图
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
为什么要有包装类?
- 体现纯粹的面向对象的思想
- 包装类是一个类,有字段和方法,比基本的数据类型强大
String num = "100"; int value = Integer.parseInt(num);
- JDK1.5之后,系统实现了自动装箱和自动拆箱,方便了基本数据类型和包装类之间的转换
Integer i1 = new Integer(123); int i2 = Integer.intValue();
一些注意点
-
在计算机中数的存储和运算使用补码的形式
-
基本数据类型和对应的包装类的区别
一个是数据类型,一个是类
- 基本数据类型和对应的包装类的初始默认值不同
如int类型默认值为0,而Integer的默认值为null,因此使用Integer可以区分是否赋值