整形
byte short int long
浮点型
float double
在 Java 中,float 和 double 类型都是浮点数类型,分别使用 4 字节和 8 字节来存储。它们的表数范围和精度不同,具体如下:
- float:单精度浮点数类型,用于表示小数,占用 4 字节,范围为 -3.40282347E+38 到 3.40282347E+38,精度为 6-7 位有效数字。
- double:双精度浮点数类型,用于表示更大或更小的小数,占用 8 字节,范围为 -1.79769313486231570E+308 到 1.79769313486231570E+308,精度为 15-16 位有效数字。
自动类型提升
自动类型转换(只涉及7种基本数据类型)
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
byte 、char 、short --> int --> long --> float --> double
特别的:当byte、char、short三种类型的变量做运算时,结果为int型,最低也要用int接收。(byte+byte也是如此)
float做运算,结果为浮点型 要用double接收。
说明:此时的容量大小指的是,表示数的范围的大和小。
char c1 = 'a';//97
int i3 = 10;
int i4 = c1 + i3;
System.out.println(i4);//输出结果:107
//1.编码情况1:
long l = 123213;//低于int范围的可以不加l
System.out.println(l);
long l1 = 21332423235234123;//编译失败:过大的整数
long l1 = 21332423235234123L;//通过
//****************
float f1 = 12.3;//编译失败 一定要加f float f1 = 12.3f;
float f1 = (float)12.3;//通过
//2.编码情况2:
//整型常量,默认类型为int型
//浮点型常量,默认类型为double型
byte b = 12;
byte b1 = b + 1;//编译失败 应该最低用int接收 1默认为int
float f1 = b + 12.3;//编译失败 应用double
强制类型转换
强制类型转换(只涉及7种基本数据类型):自动类型提升运算的逆运算。
1.需要使用强转符:()
2.注意点:强制类型转换,可能导致精度损失。
double d1 = 12.9;
//精度损失举例1
int i1 = (int)d1;//截断操作
System.out.println(i1);
//没有精度损失
long l1 = 123;
short s2 = (short)l1;
//精度损失举例2
int i2 = 128;
byte b = (byte)i2;
System.out.println(b);//输出-128 (127 +1 循环到-128) 因为byte范围-128 - 127 算术运算符那里下面有解释
3.通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
如:String a = “43”; int i= Integer.parseInt(a);
int i = (int)s1;//编译错误 String类型的不能使用()的方法用来强制类型转换
boolean类型不可以转换为其它的数据类型。
String类型
String与8种基本数据类型间的运算
1. String属于引用数据类型,翻译为:字符串
2. 声明String类型变量时,使用一对""
3. String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+
4. 运算的结果仍然是String类型
//练习1
char c = 'a';//97 A:65
int num = 10;
String str = "hello";
System.out.println(c + num + str);//107hello
System.out.println(c + str + num);//ahello10
System.out.println(c + (num + str));//a10hello
System.out.println(str + num + c);//hello10a
//练习2
//要求输出* * 下面给出几种方法;下图是运行结果
System.out.println("* *");
System.out.println('*' + '\t' + '*'); //因为是字符所以会转换成ASCII码中的数字 首先是'*'和'\t'做加法运算,转换成数字就成了整形int 然后再加上'*'对应的ASCII。
System.out.println('*' + "\t" + '*');//成功 \t是tab符
System.out.println('*' + '\t' + "*");//先做加法运算再拼接字符串
System.out.println('*' + ('\t' + "*"));
当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。
练习:
String str1 = 4; //判断对错:错
String str2 = 3.5f + ""; //判断str2对错:对
System.out.println(str2); //输出:3.5 这里是String类型 不是int
System.out.println(3+4+“Hello!”);
//输出:7Hello! (先做加法运算再字符串拼接)
System.out.println(“Hello!”+3+4);
//输出:Hello!34 直接字符串拼接了
System.out.println(‘a’+1+“Hello!”);
//输出:98Hello! (先做加法运算再字符串拼接)
System.out.println(“Hello”+‘a’+1); //输出:Helloa1 直接拼接
练习:
判断是否能通过编译
short s = 5;
s = s-2; //判断:no 2是int 不能用short接收
byte b = 3;
b = b + 4;//判断:no 和上个同理
b = (byte)(b+4);//判断:yes 强制类型转换
char c = ‘a’;
int i = 5;
float d = 1.314F;
double result = c+i+d; //判断:yes 可以用更高容量的类型接收
byte b = 5;
short s = 3;
short t = s + b;//判断:no 最低也要用int接收