JAVA,
分享于 点击 33191 次 点评:138
JAVA,
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); //输入5hello
2.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; //+=运算符,编译器会用对其进行特殊处理进行正确的类型转换,可以看作是对运算结果进行了强制转换
相关文章
- 暂无相关文章
用户点评