一.Java的数据类型
1.强类型语言
java是强类型语言,所有的变量都必须先定义后才能使用
2.java的数据类型分为两大类
//整型
byte num1 = 127; //一个字节 -2^7 ~ 2^7-1
short num3 = 20; //两个字节 -2^15 ~ 2^15-1
int num2 = 10; //四个字节 -2^31 ~ 2^31-1
long num4 = 30L; //八个字节 -2^63 ~ 2^63-1 long类型要在后面加上l或L
//浮点型
float num5 = 1.4F; //四个字节 float类型要在后面加上f或F
double num6 = 1.4D; //八个字节 double类型要在后面加上d或D
//字符类型
char num7 = 'A'; //占两个字节
//布尔类型
boolean num8 = true;//只能取 false 或者 true
/*
注意:string类型是引用类型,它不是关键字,而是一个类
*/
想记住8大基本类型占用的大小,可以通过看源码知道,例如int的包装类是Integer
按住Ctrl+鼠标左键点击Integer可以跳到源码如下图
类、接口、数组
java数据类型除了基本类型就是引用类型,此处不作详解
3.位的理解
(1)定义
位(bit)是计算机内部数据存储的最小单位,一个字节(Byte)等于8个位(bit)
(2)32位与64位电脑的区别
32位的操作系统只能装32位的cpu,只支持4GB的运行内存
而64位的操作系统能装32位的,也能装64位的,运行内存理论是无限大的
二.Java的数据类型扩展
1.浮点类型扩展
先看一个试例
float a = 0.1f;
double b = 0.1 / 10;
System.out.println(a == b);
float c = 234343284848284824f;
float d = c + 1;
System.out.println(c == d);
运行结果如下:
false
true
为什么会出现这种情况呢?
是因为java的浮点型是有限的,是离散的,它具有精度误差,接近但不等于,所以我们最好完全避免使用浮点数进行比较
2.字符类型扩展
char c1 = 'A';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//强制转化位int类型
System.out.println(c2);
System.out.println((int)c2);//强制转化位int类型
char c3 = '\u0041';
System.out.println(c3);
运行结果如下:
A
65
中
20013
A
分析:
所有的字符本质还是数字,java所用的编码表是Unicode表,范围是U0000到UFFFF,刚好u0041转为二进制为0000 0000 0100 0001对应的是65,在Unicode表中就是A,所以打印出来的就是A。