文章目录
- java基本数据自动类型转换和强制类型转化
- 1. 自动数据类型转化
- 2.强制类型转换
java基本数据自动类型转换和强制类型转化
1. 自动数据类型转化
- 基本数据类型在计算的时候,数值常量默认是int
- int,short,byte,char这四种类型任意互相计算都变成int
- int,long, float,double自己和自己本身来计算的时候没有类型的提升,如果超出了范围就会报错
- int long float double等不同类型的数字相加时,结果的类型会变成表述范围更大的类型的数字
- 赋值的时候,不止=是赋值符号,+= -=之类的都是赋值语句,他们不算运算符,因此会直接往你所要赋的值进行类型转化,他原来是什么类型,那么最后结果就是什么类型。比如 int a = 1 ; a += 2.0d;此时输出a等于int 类型的3重点:**:赋值的时候,**赋值给谁就转化成谁,**小的表述范围的常量或者变量可以自动的转化为大的表数范围的常量或者变量,反之的话(+= /= -= 之类的会直接转化过去不会报错)就算是现在的值大小超出了小的表述范围的界限,它也只会出现负数罢了 += -= /=都是赋值符号,**如果是 = ,那么大的转小的,不管大小,都会报错,会提示出现精度的损失。
- 这些计算不只是加法,包括加减乘除,特别标注,除法得不到余数
class Demo{
public static void main(String[] args){
byte a = 1;
byte sum1 = a + 1;//这里结果会报错,因为sum自动转化成为int类型,这里的数字1默认看为int
char b = "c";
int sum2 = b + 1;//这里默认会将字符串根据ASCII标转化成int类型数字,然后再与数字进行加减。
int z = x + y;
System.out.println(z);//结果为-2147483647 出现精度的损失
float e = 1.2f;
double g = e + 1.3;//小数如果末尾没有加上f,默认视为double类型,这里的g的结果为double类型
float sun = 10;
System.out.println(sun);//这里不会报错,因为默认类型转换,会将结果转化为10.0
short s = 5;
s = s + 5;//这里结果会出错,因为s+5结果为int类型的10,所以short s = int 10 结果错误
float aa = 10.7f;
float bb = aa / 2;//结果为5.35
int bb = aa /2;//结果会报错,因为此时为float,却用int来接收
int cc = 9;
int dd = cc / 2;//此时结果为4 除法默认取整
}
}
2.强制类型转换
- 数值类型的强制类型转换的前提是:精度不能损失,意思就是数字不能大于要转化的数据类型的表述范围,比如
int i = 999;byte b = (byte)i //得到-24
- 精度损失的情况表示的是此时的表述范围大于该变量的表述范围
- 小数转化为整形的数字结果为去除小数部分的整数结果
- char类型强类型转化就是按照ASCII表来,char类型的长度为2个字节
- 任何类型的加上String结果都为字符串
class Demo2{
public static void main(String[] args){
int a = 10;
byte b = (byte)a;
System.out.println(b);//此处结果得到byte类型的10
float c = 1.2f;
int d = (int)c;//此处结果为1
String aaa = "aaa";
int bbb = 10;
String ccc = aaa + bbb;//此时的结果为aaa10
}
}