(五) Java变量与数据类型
目录
- Java变量
- Java 数据类型
- 基本数据类型
- 整数类型
- 浮点(小数)类型
- 字符型
- 整型细节
- 浮点数细节
- 字符型细节
- 布尔类型: boolean
- 引用类型
- 基本数据类型
- 强制类型转换
- ++i和i++的区别
Java变量
- 需要先声明,再赋值
int a; int b=10;
Java 数据类型
- Java数据类型分为两大类:基本数据类型, 引用类型
基本数据类型
- 基本数据类型有8种, 其中6种数值型[
byte
,short
,int
,long
,float
,double
],char
,boolean
整数类型
byte
[1个字节], 存放一个数, 范围-128~127short
[2个字节], -(\(2^{15}\)~\(2^{15}-1\)), -32768~32767int
[4个字节],-(\(2^{31}\)~\(2^{31}-1\))long
[8个字节], -(\(2^{63}\)~\(2^{63}-1\))
浮点(小数)类型
float
[4个字节]double
[8个字节]
字符型
char
[2个字节], 存放单个字符 'a', 汉字'李', 汉字是两个字节,字母一个boolean
[1个字节], 存放 true, false
整型细节
- Java程序中变量常声明为int型, 默认也是int, 比如一个9,默认为int
long = 1l; // 使用long必须加上l或L
- bit: 计算机中的最小存储单位. byte: 计算机中基本存储单元, 1 byte = 8 bit
浮点数细节
-
Java的浮点型常量默认为double型, 声明float型常量, 须后加
f
或F
float num = 1.1; // 这是错误的, 因为默认是double类型 double n2 = 1.2f; // 这个也是可以的
-
科学技术法形式
5.12e2
[\(5.12\times10^2\)],5.12E-2
[\(5.12/10^2\)] -
除法的精度问题
double num1 = 2.7; double num2 = 8.1/3; // 实际上第二个是输出2.69999999之类, 因为计算机默认8.1后面还有小数位,尽量不要用运算后的小数进行大小判断 if (Math.abs(num1-num2)){ // 可以用两个数的差值在某个范围来计算相等 }
字符型细节
-
字符底层也是Unicode码
char c1 = 'a'; char c2 = 97; char c = 26446; # 对应的是李, 这是李的Unicode码 System.out.println((int)c1); System.out.println('a'+10); # 先把'a'转成Unicode码, 然后再加10 // 两者是相等的
-
单引号''
代表的是字符,双引号""
代表的是字符串String
, 注意不要用错了 -
字符和码值的对应关系
- ACSll编码表, 一个字节表示, 有128个字符, 实际上一个字节可以表示256个字符, 只用了128个
- Unicode编码表, 使用2个字节来表示字符, 字母和汉字统一都是占用2个字节, 能表达\(2^{16}\) 个符号
- utf-8编码表(可以认为是Unicode的一个改进, 是互联网上使用最广的编码), 大小可变的编码, 字母使用1个字节, 汉字3个字节
- gbk, 可以表示汉字, 字母使用1个字节, 汉字2个字节, 说明gbk表示的汉字没有utf-8表示的汉字多
布尔类型: boolean
- boolean类型只允许true或false, 无null
- boolean类型占一个字节
- 不能用0或者非0的整数代替false和true, 这点和c语言不同
boolean pass = true;
引用类型
强制类型转换
-
自动类型转换的逆过程, 讲容量大的数据类型转换为容量小的数据类型. 使用时要加上强制转换符
()
int i = (int)1.9; // 输出1
-
基本数据类型和String类型的转换
int n1 = 100; float n2 = 4.5f; String s1 = n1 + ""; String s2 = n2 + ""; # 自动转为字符串类型了
- 基本数据类型转String只需
+""
即可 - String类型转基本数据类型, 通过基本类型的包装类调用
parseXX
方法即可, Java里每个基本类型都对应一个包装类
String s5 = "100"; int num1 = Interger.parseInt(s5);
- 基本数据类型转String只需
++i和i++的区别
- 前++: ++i先自增再赋值
- 后++: i++先赋值后自增
int j = 8;
int k= ++j; //等价于j=j+1;k=j;
int k= j++; //等价于k=j;j=j+1;