基本数据类型
java是一种强类型语言,意味着必须为每一个变量声明一种类型,在java中共有8种基本类型,其中有4种整形(byte, short, int, long),两种浮点型(float(单精度浮点型),double(双精度浮点型)),一种表示单个字符的char型,一种表示真假的boolean型。
整型
- 十进制整数:常量
eg:12,-314,0 - 八进制整数:要求以0开头
eg:012
容易混淆,最好不要使用 - 十六进制整数:要求以0x或0X开头
eg:0x12
= 18( 1 × 1 6 1 + 2 × 1 6 0 1 \times 16^1 + 2 \times 16^0 1×161+2×160) - 整形常量默认为int型,long型常量加‘l’或‘L’表示
- java7开始,加前缀0b就可以表示二进制数
eg:0b1001
= 9 ( 1 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0 = 9 1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 +1 \times 2^0 = 9 1×23+0×22+0×21+1×20=9) - java7开始,数字可加下划线以方便阅读
eg:1_000_000
一百万
注: Java中,所有的数字类型占据的字节数与平台无关!(是Java能够跨平台的原因之一)
1字节 = 8bit
关于byte的范围
eg:122在计算机中的表示:
数值: | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
表示: | 正负 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
-
正数的范围:
2 0 + 2 1 + . . . + 2 6 = 2 7 − 1 = 128 − 1 = 127 2^0 + 2^1 + ... + 2^6 = 2^7 -1 = 128 - 1 = 127 20+21+...+26=27−1=128−1=127 -
负数的范围:
由于补码的原因,可以把符号和数值统一起来
补码 = 反码(基于原码) + 1
eg: - 128
先求原码(绝对值)1 0 0 0 0 0 0 0 再求反码
0 1 1 1 1 1 1 1 补码
1 0 0 0 0 0 0 0 关于-129:
补码为:1 0 0 0 0 0 0 1 转换为反码:
0 1 1 1 1 1 1 0 表示的值为127
关于short的范围
2 byte - 16位
-215 ~ 215 -1
关于int的范围
4 byte - 32位
-231 ~ 231 - 1
关于long型的范围
8 byte - 64位
-263 ~ 263 - 1
编码验证整数范围
存在错误的代码
public class TestPrimitiveType {
public static void main(String[] args) {
byte b = 129;//129无法赋给最大值为128的byte
int i = 129;
short s = 40000;//2^15 - 1 = 32767, 超出范围
long l = 789;
}
}
正常运行的代码
public class TestPrimitiveType {
public static void main(String[] args) {
byte b = 128;
int i = 129;
short s = 32767;
long l = 789;
}
}
浮点型
- 十进制计数形式
eg:3.14
或者314.0
- 科学计数法的形式
eg:3.14e2
,3.14E2
,100E-2
- Java浮点值默认为double型,如需声明一个常量为float型,则需在数字后面加f或F
eg: double d = 12345.6
float f = 12.3f
注意:在二进制中,无法准确表示某些数值
如同在十进制中无法准确表示1/3是一致的
所以在禁止舍入误差的金融运算中,它不得参与
public class TestPrimitiveType {
public static void main(String[] args) {
System.out.println(2.0 - 1.1)//结果为0.89999999...而非0.9
}
}
字符型
表示方式
- 单引号括起来的单个字符
- 直接用‘\u四位16进制数’表示,四位16进制数占16位二进制空间,所以通常一个字符占用两个字节
- 无符号的2byte可以表示215个字符,但是现在全世界的字符已经远超这个数值,所以在java中,一个字符可能占2个或者4个字节
- 强烈建议不要在程序中使用char类型,除非确实需要对utf-16代码单元(2字节一个单元)进行操作,否则使用字符串进行处理
转义字符
如需要输出双引号时就需使用转义字符
错误示范:
System.out.pritnln("Hell"o")//存在报错,O是非法的
正确方法:
System.out.pritnln("Hell\"o")
换行操作:
System.out.println("Hello")//使用println换行
System.out.print("Hello\n")//使用转义字符'\n'换行
Bool类型
真 & 假
true & false
- Boolean类型适用于逻辑运算
- 只允许取值true或者false,不可以0或非0的整数替代true和false,与c语言相同