1.数据类型
Java是强数据类型语言,变量必须先声明其类型
整型数的三种形式 二进制、八进制、十六进制
类型 | 占用空间 | 表示的范围 |
---|---|---|
byte | 1 字节 | -128-127 |
short | 2 字节 | -32768-32767 |
int | 4 字节 | -2147483648-2147483647 |
long | 8 字节 | -263-263-1 |
float | 4 字节 | |
double | 8 字节 | |
char | 2 字节 | 0-65535 |
boolean:The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its “size” isn’t something that’s precisely defined.
1)boolean a=true;//这个a在JVM中占4个字节即:32位。
2)boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。
默认值
类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | ‘\u0000’ |
boolean | false |
2.关于数据精度的几个问题
1.浮点数计算的误差问题
原因:
1.有些十进制浮点数转成二进制数时不能精确表示,有些浮点计算会得到准确的结果,因为某些计算的二进制与 十进制之间能够准确转换。
2.根据IEEE 754标准,浮点数在计算机内部存储时主要分为符号位(sign)、指数(exponent)部分、尾数(fraction)部分:
那么,这个数就是:(−1)sign×2exponent×fraction2
3.例如十进制的0.5可以表示成(−1)0×2−1×1.0 。
以32位的单精度浮点数(float)为例,它的符号位占一位(bit),指数部分占8位,尾数部分占23位。
以存储十进制的0.1为例,首先把0.1转换成二进制数。然而我们会发现十进制的0.1转换成二进制是一个无限循环小数:0.0001100110011001100…
可是,尾数只有23位,只能截取二进制小数的前23位存储。这时,误差就产生了。
当再次把这个浮点数转换成十进制数时,由于损失了一些二进制位,转换回来的十进制数自然也就与原来的不同了。
3.Java的跨平台特性
第一问:java为什么可以跨平台?
1.java通过实现JVM(java Java Virtual Machine)来实现跨平台,不同平台用相同的JVM原理来实现,所以java编译的字节码可以运行在不同平台的。
第二问: 64位与32位java虚拟机上同种数据类型所占内存大小是否一致?
1.因为JVM不同的平台用的是相同的原理,所以java同种数据类型所占内存大小在不同的平台上相同
数据类型转换
1.自动转换
表数范围小的可以向表数范围大的进行自动类型转换
2.强制转换
(数据类型)变量或表达式
注:
a.高精度向低精度类型转换的时候,有可能出现精度丢失
b.只能在继承层次内进行类型转换
c.在将超类转换成子类之前,应该使用instanceof进行检查