1.字符型
- char 存储2个字节 可以存放汉字 但存放数字时会输出对应的字符
- 字符常量用单引号 ' '
- 允许使用转义字符 如 \n \t
- char本质是一个整数 输出时对应unicode对应的字符
- 可以直接给char 赋一个整数 输出时会按照unicode字符输出
- char类型可以进行运算 相当于一个整数
字符本质
'a' -> 码值 -> 二进制 -> 存储
- ASCII表 每个字符一个字节 可表示256个字符 但只用了128个位置 起源美国 二十世纪六十年代 第一位规定为0
- unicode表 固定大小的编码 字母和汉字都用两个字节表示 将世界上所有符号纳入 没有乱码问题 但会浪费空间 最多可编码2^16个字符 兼容ASCII码
- utf-8码 大小可变的编码表 字母用一个字节 汉字用三个字节 对unicode的改进 互联网最广实现方式 是变长的编码方式 1-6个字节调整
- gbk码 字母用一个字节 汉字用两个字节
- big5码 表示繁体香港方面
tip:低精度 32位 双精度 64位
布尔类型
- boolean ture or false 无null 不可用0或非0代替true or false 与c语言不同
- boolean只占一个字节
2.基本数据类型转换
当Java程序在进行赋值或者运算的时候,精度小的类型会自动转换为精度大的数据类型,称自动类型转换
- 数据类型按进度(容量)大小排序
- char -> int -> long -> float -> double
- byte -> short -> int -> long -> float -> double
自动类型转换注意和细节
- 多种数据类型混合运算的时候 系统首先自动将所有数据转换成容量最大的那种数据类型 然后再进行计算
- 当我们把精度大的数据类型赋值给精度小的数据类型时 会报错 反之就会进行自动类型转换
- byte short 和 char之间不会相互自动转换
- byte short char 之间可以计算 计算时首先转换为int类型
- boolean 不参与转换
- 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
强制类型转换
自动转换的逆过程 将容量大的数据类型转换为容量小的数据类型 使用时要加上强制转换符()但可能造成精度降低或溢出 格外注意
int i = (int)1.9;
System.out.println(i); 精度损失
int j = 100;
byte b1 = (byte)j;
System.out.println(b1); 数据溢出
强制转换细节说明
- 当进行数据的大小从大到小 就需要使用到强制转换
- 强转符号只针对最近的操作数有效 往往使用小括号提升优先级
int x = (int)(10 * 3.5 + 6 * 1.5)
char类型可以保存int的常量值 但不能保存int的变量值 需要强转
int m = 100;
char c3 = (char)m;
System.out.println(c3);
byte short char类型在进行运算时 当作int类型处理