整数的默认类型为int
小数的默认类型是double
float f = 30.4; 编译出错:可能损失精度
如果是因为 30.4是double类型,造成向下转型失败
那 byte b = 30; 为什么编译不会出错?30默认是int类型,int比byte大,为什么能编译成功呢?矛盾中。。
小数的默认类型是double
float f = 30.4; 编译出错:可能损失精度
如果是因为 30.4是double类型,造成向下转型失败
那 byte b = 30; 为什么编译不会出错?30默认是int类型,int比byte大,为什么能编译成功呢?矛盾中。。
int i = 30;
byte b = i; 此处为何又出错:可能损失精度
但int的30和byte的30却是一样的
int i = 30;
byte b = i;
而int类型的i变量是不确定,所以byte无法接收。是不是要这样理解?
凡是存储范围小的变量不能直接赋值给存储量大的变量,即int的变量不能赋值给long,其他一样。
不关什么“可能损失精度”的事,这只是一个提示。
要将存储范围小的变量赋值给存储量大的变量就要用强制转换。long l = 1;int i = (int)l;(尽管转换后可能损失精度)还有float的赋值好像是这样的 f = 30.4F
然道是float是单精度,double是双精度,所以要加上F告诉编译器这个是float?
C语言中不用加F
又例如java中long类型的变量若大于2147483647(int的范围)就需要加L
而在C#中则可以不用L
看这个http://topic.csdn.net/u/20090410/06/c44f7022-8011-4aec-a067-19a61abe6b86.html