文章目录
前言
Java中不同的基本类型的值经常要进行相互转换,在Java中有8种基本数据类型,一般Boolean的值为true或false,不参与数据类型转换,下面就来说说另外7种基本数据类型的相互转换。
一、八种基本数据类型分类
1.1 数值型
1.1.1 整数类型
整数类型有:byte(8位),short(16位),int(32位),long(64位)
long的表示需要后面加L,不加L会默认当作int来处理,但是long a = 12这样定义不会出错,因为此时发生了int——>long的自动类型转换,此时的a是long类型,值为12.
2147483647是int的最大值,如果定义int i = 2147483648会报错。
另外,long l = 2147483648 也会报错,因为在java中,编译器一上来就会将整数型字面量看作int类型,而2147483648超过了int的范围,所以在没有赋值之前就出错了,不是l放不下这个数,只不过这个数本身超过了int的范围。
1.1.2 浮点数类型
浮点数类型:float(32位) ,double(64位)
float的表示需要后面加F或者f,float f = 8.9f,不加f的带小数点的数字默认是double类型,例如:double d = 8.9;
下面的代码会出错:
float a = 3.4;
因为3.4默认是double类型,将3.4赋值给一个float类型变量会出错,此时需要强制类型转换,后面会解释什么是强制类型转换
float a = (float)3.4;
1.2 字符类型
char(16位),用单引号包围:char c = ‘a’,大部分单个汉字也可以 char c = ‘我’
1.3 布尔类型
boolean(8位),只有两个值:true或者false
二、类型转换
2.1 自动类型转换
系统支持把某种基本类型的值直接赋给另外一种基本类型的变量,即:小容量可以直接赋值给大容量,称为自动类型转换。
理解:自动类型转换,把一个表示范围小的数值或变量直接赋给另一个表示范围大的变量,就如同有两瓶水,把小瓶里的水倒到大瓶中时不会出现什么问题。Java支持自动类型转换。
转换图:
代码如下(示例):
int a = 6;
float f = a;
System.out.println(f);//6.0
byte b = 9;
//下面的代码将出错
char c = b;
//byte可转为double
double d = b;
System.out.println(f);//9.0
把任何基本数据类型的值和字符串进行拼接时,将自动转换为字符串类型。这种方式的使用比较广泛,经常需要将整型转换为字符串类型。
代码示例:
int a = 6;
String str = a+“”;
System.out.println(str);//6(字符串类型)
System.out.println(3.5f + “”);//3(字符串类型)
System.out.println(3 + 4 +“Hello”);//7Hello
System.out.println(“Hello”+ 3 + 4);//Hello34
2.2 强制类型转换
将大容量的数据转换为小容量的数据时,需要采用强制类型转换。
语法格式:(targetType)value。
进行强制类型转换时,类似将大瓶子里的水倒入到小瓶子,如果大瓶子中的水没有超过小瓶子的体积容量,此时不会出现问题。但是大瓶子水超过小瓶子的容量,会产生溢出,就是精度损失,造成数据丢失。
转换图:
代码如下(示例):
long x = 100L;
int y = (int)x;
System.out.println(y); //100
强制类型转换时可能会损失精度。
通常情况下,字符串不能直接转为基本类型,但通过基本类型对应的包装类可以将值为数字的一个字符串转换成基本类型,例如:
String a = “12”;
int i = Integer.parseInt(a);
如果a为一个带字母的字符串,则会报错。
2.2 表达式类型的自动提升
当一个算数表达式中包含多个基本类型的值时,整个算数表达式的数据类型将自动提升。
提升规则:
byte、short和char被提升为int
整个算是表达式的数据类型自动提升到与表达式中最高登记操作数同样的类型。
short a = 5;
//下面这个语句会报错
a = a - 5;
//因为表达式中的a将自动提升为int类型,再将右边的int类型赋值给short类型的a将发生错误
下面是正确的自动提升的示例:
byte b = 1;
char c = 'a';
int i = 23;
double d = .3.14;
double result = b + c + i * d;
如果表达式中函数字符串,把加号+放在字符串和基本类型值之间时,这个加号+是一个字符串链接运算符,而不是进行加法运算
示例如下:
System.out.println("Hello!" + 'a' + 7); //Hello!a7
System.out.println('a' + 7 + "Hello!"); //104Hello!