1、char
char c = 'a'; //a
char c = '国'; //国
char c = 'ab'; //报错,ab是字符串
char c = "a"; //报错,类型不兼容,使用Sring
转义字符 \
char c1 = 'n'; //n
char c2 = '\n'; // \n换行符
char x1 = 't';
char x2 = '\t'; // 制表符Tab键,制表符和空格不一样,ASCII不一样
2、整数型
数据类型 占用空间大小 默认值 取值范围
byte 1 0 [128-127]
short 2 0 [-32768-32767]
int 4 0 [-214743684-2147483647]
long 8 0L
整数型字面值三种表示方式:
十进制
八进制:0开始
十六进制:0x开始
int a = 10; //10
int b = 010; //8
int c = 0x10; //16
//java 默认是int类型,456是int类型,4个字节,x声明的啊long,8个字节,int的456转换为long的x,存在类型转换
//int是小容量,long是大容量,小容量转大容量是自动类型转换
long x = 456;
//2147483648默认是int,但是超出了int的范围了。所以还没赋值就出错了
long y = 2147483648; //报错:过大的整数
//解决这个问题,后面加L,自身就是long类型,以下数据没有超过long类型
long y = 2147483648L;
// 大容量转小容量需要强制类型转换
long z = 100L;
int w = z; //编译错误
// 加上强制类型转换,编译通过,可能会运行阶段损失精度
//因此强制类型转换谨慎使用
//强转原理:
//原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 011100100
//转后数据:00000000 00000000 00000000 011100100
//将左边的二进制去掉
long z = 100L;
int w = (int) z; //编译成功
但是:byte是特别的,只要整数型字面值没有超过byte的范围
byte b = 50;//成功
byte c=127;//成功
byte c=128;//报错,超过了byte的范围
3、浮点型
float: 单精度,4个字节
double:双精度,8个字节
JAVA中所有的浮点型字面值都默认double,要想是当作float,得在字面值后加F/f
4、布尔型
boolean: 0/1 1个字节
关于数据类型之间是转换
小容量向大容量转换是自动类型转换,容量从小到大:byte<short<int<long<float<double
<char
任何浮点型不管占用多少字节,都比整数型容量大
char和short可表示的种类数量相同,但是char可以取更大的正整数。
char c = 97;
大容量转小容量是需要强制转换
当整数字面值没有超出byte,short,char取值范围,可以直接赋值byte,short,char类型的变量。
byte,short,char混合运算时候,各自先转成int型
多种数据类型缓和运算,先转换成容量最大的那个再运算
byte a = 1000;//错误超出byte的取值范围
byte b = 20;//可以
iny c=1000;
long d=c;//错误,精度丢失,大精度到小精度
long g=10;
int h = g / 3;//错误,g是long, g/3是long类型,不能赋给int
byte b = 3;//可以
int i = 10;
byte b=10/3;//编译不通过,因为编译器只检查语法,不会运算i/3