数据类型
1.八大基本数据类型
数值型
1)整数类型(byte 字节,short 短整型,int 整型,long 长整型)
2)浮点类型(float 单精度浮点型,double 双精度浮点型比float精度高)
字符型(char) char类型为2个字节,本质就是一个数值
布尔型(boolean)
2.引用数据类型
类(class)
接口(interface)
数组([])
整数类型
1.整数类型就是用于存放整数值的,比如100、200、300等
2.四种整数类型
byte/字节 1字节 -128~127
short/短整型 2字节
int/整型 4字节
long/长整型 8字节
3.出现的代码中的整数,默认为int 声明long常量需后面加L或l
int a = 1; //正常
int b = 1L; //报错,塞不下
long c = 1L; //正常
浮点型
1.浮点类型可以表示一个小数,比如0.13、1.0、.43等
2.浮点型分类
float 4字节
double 8字节
3.出现在代码中的小数,默认为double。声明float常量需后面加F或f
float a = 10.1; //报错,10.1是double,a是float,放不下
float b = 10.1F; //正常
double c = 10.1; //正常
double d = 10.1F; //正常
4.科学计数法4.3e、4.3e-3
System.out.println(4.3e3);
System.out.println(4.3e-3);
5.小数精度问题 1.1与3.3/3
double a = 1.1; // 1.1
double b = 3.3/3; // 1.0999999999999999
字符型
1.字符类型用来存单个字符,java的char占2个字节,可以存汉字,使用单引号
2.测试案例
char c1 = 'a'; // a
char c2 = '\t'; //
char c3 = '中'; // 中
char c4 = 97; // a
char c5 = 0x4e2d; // 中
char的本质是一个整数,输出的是Unicode码对应的字符,如果非要输出一个整数,
需要强制转换 (int)c4
3.字符型存储
存储:a -> 97 -> 二进制
读取:二进制 -> 97 -> a
4.char类型可以进行运算
char a = 'a' + 1;
System.out.println(a); // b
System.out.println((int)a); // 98
布尔型与类型转换
1.布尔类型占一个字节,取值true或false。不能用0或者非0数据代替false和true
2.自动类型转换
java在进行赋值或者运算的时候,精度小的类型可以自动转换为精度大的类型
3.数据类型按精度大小排序
char -> int -> long -> float -> double
byte -> short -> int -> long -> float -> double
4.自动转换注意事项
boolean不参与转换
byte和char、short和char之间不会自动转换
byte、short、char计算转换为int类型
5.自动类型提升
有多种数据类型混合运算的时候,
会转成精度最大的那个数据类型,
再进行计算。
表达"式最终返回结果的类型,
自动提升为操作数中精度最高的类型。
6.+号两边有一边是字符串,那么就进行字符串拼接
+号两边如果都没有字符串,那么就进行数值相加,转换不了数值就报错
public class Hello {
public static void main(String[] args) {
// 测试案例
// int a = 1; // 正常,默认是int现在赋值给int当然是可以的
// int b = 'c'; // 正常,char -> int -> long -> float -> double char类型可以提升赋值给int
// int a = 1;float b = a + 0.1; // 报错,a是int和0.1相加提升到double,再把double赋值给float是放不下的
// int a = 1;float c = a + 0.1F; // 正常,int+float提升到float,再赋值给float,完全可以
// int e = 100;byte f = e; // 报错,byte -> short -> int -> long -> float -> double ,byte装不下int
// byte d = 127; // 正常,127在byte的范围内
// byte d = 127;char g = d; // 报错,byte和char、short和char之间不会自动转换
// byte h = 1;byte i = 2;byte j = h + i; // 报错,byte、short、char计算转换为int类型,byte是装不下int的
// byte a = 2;a = a + 3; // 报错,byte、short、char计算转换为int类型,byte是装不下int的
// byte a = 2;int b = 0;b = a + 3; // 正常,byte、short、char计算转换为int类型,int赋值给int没问题
// byte b1 = 3;byte b2 = 7;int x = b1 + b2; // 正常,byte、short、char计算转换为int类型,int赋值给int没问题
// short a = 100;int b = 200;short c = a + b; // 报错,byte、short、char计算转换为int类型,short是装不下int的
// boolean a = true;int c = a + 1; // 报错,boolean不参与转换
// int a = 100;System.out.println(a + "1"); // 正常,转换为1001
// boolean a = true;System.out.println(a + "1"); // 正常,转换为true1
}
}
强制类型转换
1.当类型不一致,又不符合类型自动转换要求,而你又想要转换的时候,就需要使用强制类型转换
2.强制转换的优先级比较高,需要清楚的知道要转换的是表达式的哪一部分
3.类型转换不只是存在于基本数据类型,引用数据类型也可以转换
强转需谨慎
强转需谨慎
强转需谨慎
一定要清楚自己想要什么结果
public class Hello {
public static void main(String[] args) {
// 测试案例
// int a = (int) 100.2;
// int b = 100;byte c = (byte) b;
// float b = 2.2f;b = (float) (b + 3.0); // (b + 3.0为什么要写()包起来,如果不写() 那么只是转了b
}
}