java中int类型边界
简单数据类型之间的转换
在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double
简单数据类型之间的转换又可以分为:
- 低级到高级的自动类型转换
- 高级到低级的强制类型转换
- 包装类过渡类型能够转换
自动类型转换 低级变量可以直接转换为高级变量,例如,下面的语句可以在Java中直接通过:
byte b;
int i=b;
long l=b;
float f=b;
double d=b;
如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如r
char c='c';
int i=c;
System.out.println("output:" i);
输出:output:99;
对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。
short i=99;
char c=(char)i;
System.out.println("output:" c);
输出:output:c;
但byte,short,int三种类型都是整型,因此如果操作整型数据时,最好统一使用int型。
强制类型转换 将高级变量转换为低级变量时,情况会复杂一些。即你必须采用下面强制类型转换这种语句格式:
int i=99;
byte b=(byte)i;
char c=(char)i;
float f=(float)i;
可以想象,这种转换肯定可能会导致溢出或精度的下降
数据溢出:
int money=1000000000;
int year=20;
long total=(long)(money*year);//错误、因为money与year的乘积已经溢出再强制转换成long类型,结果依然不正确
long total=(long)money*year;
final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);//5
final long MICROS_PER_DAY1 = 24L * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY1 = 24L * 60 * 60 * 1000;
System.out.println(MICROS_PER_DAY1/MILLIS_PER_DAY1);//1000