自jdk1.1版本就有了基本数据类型的包装类
Byte, Short, Integer, Long, Float, Double, Character, Boolean
但是, 从jdk5.0起才有 auto boxing/unboxing 特性
--------------------------------------------------------------------------------
1. 整数类型
byte 1*8 bit -2^7~2^7-1 即 -128~+127
short 2*8 bit -2^15~2^15-1 即 -32768~32767
int 4*8 bit -2^31~2^31-1 约 ±21 亿
long 8*8 bit -2^63~2^63-1 数值后+l或L, 如 long num = 32L;
建议+L, 因+l和数值1实在太像了, 易混淆
注意:
java中没有无符号整形. 最高位为符号位, 0为非负, 1 为负数
int 和 byte 较常用, 整数类型默认为 int.
***虽然 long 占 8 字节, float 占 4字节,
但由于整数和浮点数在计算机中存储方式的不同, float 取值范围比 long 大!!!
byte 和 short 类型主要用于特定的应用场合.
如底层的文件处理(IO流)或者需要控制占用存储空间量的大数组
byte, short 型基本不用于算术运算, 因为会被自动提升为 int 类型
开发中: 尽量避免使用 int 以下的数据类型来定义变量
int age = 20; // 定义年龄
注意各整数类型的范围, 当运算溢出时, 丢失精度!!!
如 long height = 8848 * 1000 * 1000;
// 右边的运算结果为 int 型, 但是运算结果为 88 亿, 已经超过 int 取值范围, 将溢出, 丢失精度!!!
// 应修改为 long height = 8848 * 1000 * 1000L;
----------------------------------------
//java.net 包中 InetAddress 对象常用 byte
如 byte[] ip = {(byte)192,(byte)168,(byte)0,(byte)254,};
for (byte b : ip )
{
System.out.println(b); //-64, -88, 0, -2
}
----------------------------------------
// 面试题
System.out.println(12345 + 5432l);
/*
结果是 long 型的 17777.
注意, 而不是int 型的 66666, 因为 5432l 实际上是 5432L.
***是, l(L) 和 1(数值) 实在太像了
*/
--------------------------------------------------------------------------------
2. 浮点类型
float 和 double 主要差异在精度的不同.
float 4*8 bit 单精度浮点数, 有效数字6~7位, 取值范围±3.4E38F
其数值后+f或F, 如 float num = 34.5F; 建议+F
double 8*8 bit 双精度浮点数, 有效数字15位, 取值范围±1.7E308
其数值后+d或D, 但一般不加.