double PI=3.14;
float PI=3.14;
如果想要将double长度的数据指定给float类型变量,编译程序就会告诉你double类型放到float变量,会因为8个字节数据要放到4个字节空间,有两种方式可以避免错误:
第一种方式是在3.14后面加上F,这会告诉编译程序,请用float来存储3.14F这个值:
例如:float PI=3.14F;
第二种方式是将double类型的3.14丢(Cast)到float变量中,让编译程序通过:
例如:
float PI=(float) 3.14;
这里使用(float)语法告诉编译程序,你就是要将double类型的3.14指定给float变量,让编译程序通过。
整数部分类型转换
int number=10;
例如:
int number=2147483648;
编译时会得到integer bumber too large的错误,也许你认为是int变量number最大值装不下2147483648,事实上,并非是number装不下2147483648,是因为程序在写下一个整数时,默认是使用不超过int类型长度,如果超过了,你要告诉编译程序,用long来配置整数的长度,也就是在数字后面加上个L;
例如:
long number=2147483648L;
byte number=10;
因为10是在byte可存储的范围中,所以上例是正确的。
byte number=128;
128超过byte可存储的范围,于是会使用int存储128,你要将int类型存储至byte变量,就会出现possible loss of precision的编译错误。
在来看运算,如果表达式中包括不同类型数值,则运算时以长度最长的类型为主,其他数值自动提升(Promote)类型,
例如:
int a=10;
double b=a*3.14;
这个程序片段中,a是int类型,而写下的3.14默认是double,所以a的值被提至double空间进行运算。
short a=1;
short b=2;
short c=(short) (a+b);
这就是告诉编译程序,要将int的运算结果丢到short;