溢出问题和类型转换问题
int a=10_0000_0000;//jdk1.7版本后可以用下划线来隔开数字,不影响数值
int b=20;
int c=a*b;
System.out.print(c);
运行结果:-1474836480
原因是:int的取值范围是-21_4748_3648到±21_4748_3648。 当a*b时,会造成溢出。
解决办法
int a=10_0000_0000;//jdk1.7版本后可以用下划线来隔开数字,不影响数值
int b=20;
long c=a*(long)b;
System.out.print(c);
运行结果:20000000000
在计算之前就进行类型转换,默认的计算之后的结果也是long,就不会溢出,再用long来接收。
但是其中有一个误区就是:
很多初学者以为用一个long来接收就不会溢出,但是在两个int类型计算时,结果默认就是int类型,此时就已经溢出,再用long来接收也还是溢出的。
int a=10_0000_0000;//jdk1.7版本后可以用下划线来隔开数字,不影响数值
int b=20;
long c=a*b;
System.out.print(c);
运行结果:-1474836480
小知识:
数字运算默认的类型是int,除非运算的数中有比int类型优先级高的,就会转换成高优先级的,但是运算的数中的优先级都比int低的话,会默认是int。