Java 是一种强类型的语言,声明变量时必须指明数据类型。变量(variable)的值占据一定的内存空间。不同类型的变量占据不同的大小。
java的数据类型分为基本数据类型和引用数据类型两种。基本数据类型不涉及内存的开辟问题。
Java的引用数据类型可分为三种:类(class)、接口(interface)、数组。
Java中共有8种基本数据类型,包括4 种整型、2 种浮点型、1 种字符型、1 种布尔型,请见下表。
数据类型 | 说明 | 所占内存 | 数据范围 | 备注 |
---|---|---|---|---|
byte | 字节型 | 1 byte | -128~127 | |
short | 短整型 | 2 bytes | -32768~32767 | |
int | 整型 | 4 bytes | -2147483648~2147483637 | |
long | 长整型 | 8 bytes | 9223372036854775807 | long最后要有一个L字母(大小写无所谓)。 |
float | 单精度浮点型 | 4 bytes | -3.4E38~3.4E38 | float最后要有一个F字母(大小写无所谓)。 |
double | 双精度浮点型 | 8 bytes | -1.7E308~1.7E308 | double最后最好有一个D字母(大小写无所谓)。 |
char | 字符型 | 2 bytes | 0~255 | 字符型数据只能是一个字符,由单引号包围。 |
boolean | 布尔型 | 1 bit | true, false |
在Java中,整型数据的长度与平台无关,这就解决了软件从一个平台移植到另一个平台时给程序员带来的诸多问题。与此相反,C/C++ 整型数据的长度是与平台相关的,程序员需要针对不同平台选择合适的整型,这就可能导致在64位系统上稳定运行的程序在32位系统上发生整型溢出。
整型(byte、short、int、long)
对于整型数据,通常情况下使用 int 类型。但如果表示投放广岛长崎的原子弹释放出的能量,就需要使用 long 类型了。byte 和 short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。
八进制有一个前缀 0,例如 010 对应十进制中的 8;十六进制有一个前缀 0x,例如 0xCAFE;从 Java 7 开始,可以使用前缀 0b 来表示二进制数据,例如 0b1001 对应十进制中的 9。同样从 Java 7 开始,可以使用下划线来分隔数字,类似英文数字写法,例如 1_000_000 表示 1,000,000,也就是一百万。下划线只是为了让代码更加易读,编译器会删除这些下划线。另外,不像 C/C++,Java 不支持无符号类型(unsigned)。
整形变量常见问题:
1、int x; //若没有对 x 赋值,x 的值未知,不为0,故编译报错。
2、int max=Integer.MAX_VALUE; //int型变量最大值2147483647
System.out.println(max+1); //数据溢出,输出-2147483648;解决方法:数据类型转换为Long型
3、int x = 10;
long y = x; //自动转换,范围小转换为范围大类型
int temp = (int) y; //强制转换,可能导致数据溢出
4、System.out.println(9/2); //输出结果为4,若要得到4.5,需进行类型转换
浮点型(float、double)
float 类型有效数字最长为 7 位,有效数字长度包括了整数部分和小数部分。例如:
- float x = 223.56F;
- float y = 100.00f;//不加F报错
double 类型有效数字最长为 15 位。与 float 类型一样,double 后面也带有标志“D”或“d”。例如:
- double x = 23.45D;
- double y = 422.22d;
- double z = 562.234;
大多数情况下都是用 double 类型,float 的精度很难满足需求。
常见问题:
1、double x=10.02;
System.out.println(x*x);
输出结果100.400399999999是错误的,这是JDK的bug,需使用BigDecimal处理
字符型(char)
ASCII码:大写字母范围:65~90。小写字母范围:97~122。
Java在定义中文字符时使用Unicode编码而非ASCII编码。例如定义中文字符:char x ='张';