Java 数据类型转换

来源:互联网 发布:linux查看jdk版本 编辑:程序博客网 时间:2024/06/06 02:25

自动类型转换

自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。

int i=3;

double d=i;

float f=i;

double d2=f;


在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。


      boolean  8bit/1byte
      byte      8bit/1byte
      char      16bit/2byte
      short     16bit/2byte
  float      32bit/4byte
      int        32bit/4byte
      long      64bit/8byte
      double  64bit/8byte

特例

可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表示范围

short b=12;//合法

short b=1234567;//非法

强制类型转换

强制类型转换又被称为造型,用于显示的转换一个数值的类型,在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

double x=3.14;

int a1=(int)x;

print输出:3

当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,无意义的值

int x2=-100;

char a2=(char)x2;

print输出:?

表达式中的类型提升问题

int a=4;

long b=5;

int c=a+b;//这时a+b的值是long类型

int c=(int)(a+b);

所有的二元运算符(+-*/%)都会有类型提升的问题!超类型时需要强制转型。

long类型强转使用大写L并且运算时尽量写在第一个值的后面例如:long times=70L*60*24*365*70;//会先提升数据类型

int money=1000000000;//10亿

int years=20;

long total=(long)(money*years);//错误。因为money*years已经运算完,在提成long输出的结果和没有long的数值是一样的

long total=(long)money*years;//正确。先提升后计算


原创粉丝点击