JAVA
2015-10-07 19:34
351 查看
1、JAVA中的float和double
1.1、java中的double和float类型都是不精确的,都可以看作是表示是一个近似数字,下面Code:System.out.println(1/0); //运行出错,分母为0,这个很好理解 System.out.println(1/0.0); //不报错,结果输出为Infinity,也就是正无穷大
其中第二段代码中,分母0.0是一个double类型的小数,表示无限接近0.0,1除以一个无限接近于0的数字,就是无穷大,所以输出为正无穷大。
1.2、double和float类型转换会造成精度丢失
float f = 2.1f ; double d = f ; System.out.println(f); System.out.println(d);
运行结果:
double类型直接相互运算也是不精确的。
double d1 = 2.1; double d2 = 3.2; System.out.println(d1 + d2);
运行结果:
所以需要精确计算的话,需要用BigDecimal
2、JAVA运算时自动类型提升
2.1、java表达式运算时,会在低类型的碰到高类型的变量时,会自动将低类型的数据转换成高类型的数据来进行运算,例如:int i = 2; String str = "hello"; System.out.println(i + str); //输出2hello
注意:自动类型提升是一步一步提升的,并且只有低类型碰到高类型的时才进行类型提升,例如:
int i1 = 2; int i2 = 3; String str = "hello"; System.out.println(i1 + i2 + str); //输入5hello2.2、java中的+=、-=、*=、/=这几个运算符,java编译器会用正确的类型对左右两个类型进行强制转换
先看一个例子:
byte b = 1; b = b + 1;上段代码会报错,1是int类型的数据,b是byte类型的数据,b +1 之后的结果就是int类型,赋值给左边的b,就是高类型的int赋值给低类型byte,要加上强制转换才不会报错
应该是:b = (byte) (b + 1);而对于下段代码,编译器不会报错
byte b = 1; b += 1; //+=运算符,编译器会用对其进行特殊处理进行正确的类型转换,可以看作是对运算结果进行了强制转换
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统