java内置数值类型
类型名 | 范围 | 存储大小 | 包装类 |
---|---|---|---|
byte | − 2 7 ( − 128 ) ∼ 2 7 − 1 ( 127 ) -2^7(-128)\sim2^7-1(127) −27(−128)∼27−1(127) | 8位带符号数 | Byte |
short | − 2 15 ( − 32   768 ) ∼ 2 15 − 1 ( 32   767 ) -2^{15}(-32\,768)\sim2^{15}-1(32\,767) −215(−32768)∼215−1(32767) | 16位带符号数 | Short |
int | − 2 31 ( − 2   147   483   648 ) ∼ 2 31 − 1 ( − 2   147   483   647 ) -2^{31}(-2\,147\,483\,648)\sim2^{31}-1(-2\,147\,483\,647) −231(−2147483648)∼231−1(−2147483647) | 32位带符号数 | Integer |
long | − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 −263∼263−1 | 64位带符号数 | Long |
float | 负数范围:
−
3.4028235
E
+
38
∼
−
1.4
E
−
45
-3.4028235E+38\sim-1.4E-45
−3.4028235E+38∼−1.4E−45 正数范围: 1.4 E − 45 ∼ 3.4028235 E + 38 1.4E-45\sim3.4028235E+38 1.4E−45∼3.4028235E+38 | 32位 | Float |
double | 负数范围:
−
1.7976931348623157
E
+
308
∼
−
4.9
E
−
324
-1.7976931348623157E+308\sim-4.9E-324
−1.7976931348623157E+308∼−4.9E−324 正数范围: 4.9 E − 324 ∼ 1.7976931348623157 E + 308 4.9E-324\sim1.7976931348623157E+308 4.9E−324∼1.7976931348623157E+308 | 64位 | Double |
char | 0 ∼ 2 16 − 1 0\sim2^{16}-1 0∼216−1 | 16位的Unicode码,可用字符如’a’, 整数、unicode码如’\u0000’表示 | Character |
boolean | { f a l s e , t r u e } \{false, true\} {false,true} | 1位 | Boolean |
Attention:
- 默认情况下,Java中的小数都是double型的,若要声明一个小数是float型的,则需要在数值的末尾加上F或者f,注意,必须要加F或者f,否则会出错。如float
num=12.34F; - java内置的数据类型都有其对应的包装类,这些包装类在java.lang包中,包装类类型变量本质上是一种引用类型变量,即变量本身存的是地址而不是值,直接用比较符号(==、<、<=、>、>=)实际是比较地址,要想比较值,得用值比较方法compareTo();包装类类型变量存储的值是不能修改的,直接用=赋值,实际是改变变量指向的对象。
1、关于数值溢出
java不会报关于上溢的警告或错误,因此要注意给定类型的赋值范围;太小而无法被存储的浮点数(无限接近0),会造成下溢,java近似认为是0,因此通常无需考虑下溢问题。
int num1 = 2147483647 +5, num2=-2147483648-5; //整型上溢
System.out.println("num1 = "+num1+", num2 = "+num2); // num1 = -2147483644, num2 = 2147483643
double num3 = 1.0E-323, num4=1.0E-323/10; //浮点型下溢
System.out.println("num3 = "+num3+", num4 = "+num4); //num3 = 1.0E-323, num4 = 0.0
2、java没有unsigned类型
3、数值类型转换
向上转换:将一个数值赋给支持更大数值范围类型的变量,如将int类型数值赋给long类型变量,向上转换一般不会出什么问题。
向下装换:将数值赋给更小范围类型的变量,必须显示转换。
int inum;
double fnum=9.0;
inum = (int)fnum; //向下赋值,显示转换
fnum = inum; //向上赋值,直接转换