您的位置:首页 > 编程语言 > Java开发

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); //输入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; //+=运算符,编译器会用对其进行特殊处理进行正确的类型转换,可以看作是对运算结果进行了强制转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java基础