Java温习——基本数据类型转换

来源:互联网 发布:民谣吉他调音器软件 编辑:程序博客网 时间:2024/06/07 02:30

一、数据过大和溢出

要表示的数据超出数据类型的临界范围时,称为溢出

发生溢出时,程序没有做数据范围检查处理,会出现数据紊乱现象;

编译时不检查范围,只检查语法错误,如下所示:

int intMax1 = 2147483647; int res = intMax1 + 1;    // 不报错,因为只有在运行时才知道res的值int intMax2 = 2147483648; // 报错,不符合语法要求,因为int类型最大值是2E31-1


注:

比较大小最好直接用比较运算符,而不要两个数相减判断是否大于0,因为有可能出现溢出现象;




二、数据类型转换

基本数据类型包括byte, short, int, long, float, double, char, boolean,但boolean不属于数据类型,不参与转换

把不同数据类型看成不同容量的容器,如byte是1B,最多装1斤水;short是2B,最多装2斤水,但也可装1斤水;

1 自动转换

隐式类型转换,当把小数据范围类型的数值或变量赋值给另一个大数据范围类型变量,系统可自动进行类型转换;

一般,byte、short、char不参与转换,直接赋值给int类型;

如将装一斤水容器里的水倒进可装两斤水的容器中;


2 强制转换

显式类型转换,当把大范围类型的数值或变量赋值给另一个小范围类型变量时,系统不能自动完成转换,需加上强制类型转换符

可能造成数据精度的降低或溢出,因此使用时格外小心;

如把装两斤水容器的水倒进装一斤水的容器中,可能造成水溢出;

整型常量默认是int类型,但可将一个int类型常量赋值给byte/char/short类型变量,因为编译器在编译时计算当前整数值在byte/char/short类型范围内,底层直接转换;

浮点型常量默认是double,因此将一个double类型常量赋值给float类型变量时,必须进行强制类型转换;




三、表达式类型的自动提升

当一个算术表达式包含多个基本数据类型(boolean除外)的值或变量时,整个算数表达式的数据类型在数据运算时出现类型的自动提升;

自动提升的规则是(a)所有的byte、char、short类型被自动提升为int类型;(b)整个表达式的最终结果类型被提升为表达式中类型最高的类型;



注:

String类型和任意数据使用+连接,结果都是String类型;


0 0