------<a href="http://www.itheima.com"target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!-------
一、Java的基本数据类型
Java中有8中需要特殊处理的数据类型,在Java中称他们为基本数据类型,他们的存在是使Java不是纯粹的面向对象语言的原因之一。Java中的基本数据类型不像C和C++等其他语言那样,它的基本数据类型的存储空间的大小有明确的规定,不随机器硬件的变化而变化,这是java能够跨平台的有一原因;另外,java中不存在无符号数据类型。
1 整数类型
Java中有四种数据类型来存储整数,它们分别是byte、short、int、long它们占用的空间是不一样的,因而能表示的数据范围也不一样。Java 中只支持有符号数,从而避免了许多潜在的问题,Java中有符号数是采用补码(two’s complement)编码的,补码中,将其二进制表示的最高位视为符号位,可以解释为负权。以一个byte型数为例来说明补码编码怎样表示整数,11110000代表的整数是。
w位补码能表示的最小值是,其值为
,能表示的最大值为
,其值为
1。 各个整型能表示数的范围如下表
类型名 |
长度 |
最小值 |
最大值 |
byte |
8 |
-128 |
127 |
short |
16 |
-32768 |
32767 |
int |
32 |
-2147 483 648 |
2147 483 647 |
long |
64 |
-9223 372 036 854 775 808 |
9223 372 036 854 775 807 |
2 浮点数类型
Java中有两种数据类型来存储浮点数,分别是单精度浮点数float和双精度浮点数double。浮点数在内存中的表示遵循IEEE(电气和电子工程师协会)754标准,IEEE标准用的形式来表示浮点数:
符号 s决定一个数是负数(s=1),还是正数(s=0)
尾数 M是一个二进制小数,它的范围是1—2-ε
阶码 E的作用是对浮点数加权,这个权重是2的E次幂
将浮点数划分为3段,分别对这些值进行编码:
一个单独的符号位s直接编码s
k位的阶码字段编码阶码E
n位小数字段编码尾数M
单精度:
s(1bit) |
exp(8bit) |
frac(23bit) |
双精度:
s(1bit) |
exp(11bit) |
frac(52bit) |
float型数后要跟一个后缀F,没有后缀的浮点数默认为double类型。有3个特殊的浮点数值,它们分别是正无穷大、负无穷大和NaN(not a mumber)
3 字符型和布尔型
Java中用char类型来表示字符,char采用Unicode编码方式编码,在java中占两个字节;布尔类型有两个值,true和flase,用来进行逻辑判断,布尔型不能和其他基本类型进行相互转化。
二、基本数据类型之间的转换
在编写程序的过程中,经常会遇到将一种数据类型赋给另一种数据类型和将几个不同类型的进行计算,由于数据类型之间的差异,在进行上述操作时要进行数据类型的转换,有两种转换形式,其一是自动类型转换,其二是强制类型转换。没有后缀的整数的默认类型是int型,没有后缀的浮点数默认是double型
1 自动类型转换
要实现自动类型转换,需要满足两个条件,两种类型彼此兼容和目标类型的取值范围要大于源类型
byte b = 3
int i = b //没有问题
自动类型转换发生的方式是自动类型提升,如果对基本数据类型进行算数运算或按位运算,我们能发现,只要类型比int小, 那么在运算之前,这些值会自动提升为int,这样一来,生成的结果就是int类型。通常表达式中最大的数据类型决定了表达式结果的数据类型。数据类型转换之默认转换byte,short,char>int> long > float> double
2 强制类型转换
当两种类型彼此不兼容,或目标类型的取值范围小于源类型,自动转换无法进行,这是要进行强制类型转换。强制类型转换的一般格式是:目标类型 变量名 = (目标类型)源类型,例如 int a = 10;short b =(short)a;这段代码的意思是,先把int型变量a的取值强制转换成short类型,然后再赋值给short型变量b。强制类型转换可能会造成精度丢失和信息丢失。