Java赋值语句举例练习
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
下列Java变量初始化赋值语句编译能通过么?为什么?(仅仅局限于初始化的过程)
变量初始化的时候:出现浮点型数据的时候:这种题要分两步考虑:
Step1. 浮点型常量值是什么类型的。如果没有标示,默认是什么类型的
这一步非常重要!!!也是必须考虑的
Step2. 左边的浮点型变量的类型是否和右边的浮点型常量的值的类型一致
如果一致:就看这个常量表示的值的大小是不是符合左边变量本身表示的范围之内
如果不一致:左边的浮点类型double高于右边的float 编译仍然正确
左边的浮点类型float低于右边的double 编译错误 因为 浮点类型
的小数点是位置是未知的。如果double类型的常量赋给float类型的变量,很可能这个double类型的常量存储进去之后,由于float表达的精度不够而出现精度损失。
变量初始化的时候:对于整型变量之间的赋值,只要是右边常量的值在左边的范围之内就可以。因为整型没有小数点,所以范围不超就可以保证精度不损失
结论:
所以以上两点可以看出来:精度可能损失是变量初始化赋值能否正确与否的根本原则。
如果一定不会损失精度,那就一定编译正确
否则不一定损失就一定编译错误。
浮点数据库麻烦在:它里面有小数点,小数点的位置未知。所以考虑起来要比整形数据要麻烦点。
[1]. byte b =2;
//正确 因为byte占一个字节 范围就是-128~127 2(尽管2默认是int 但是存储进去 不损失精度) 在这个范围之内 所以赋值正确
[2]. byte b =128;
//错误 超出byte表示的范围
[3]. short s =30000; //short的范围是-32767~32768 30000没超范围 正确
[4]. long l =4l; //正确
[5]. float f =2.3; //错误!!2.3本身默认是double类型的 double赋值给float精度可能会损失,所以编译一定出错
[6]. float f =2.3f; //正确。浮点数据两边类型匹配,不会出现精度损失。编译正确
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------