超出范围时最大值变为最小值,最小值变为最大值,且当赋值时的值超出范围,那么是会直接报错,不能运行。只有以累加或减的形式才可以达到超出范围的形式。
//基本数据类型超出范围
/*
1.byte :-128~127(-2的7次方~2的7次方-1)
2.short :-32768~32767(-2的15次方~2的15次方-1)
3.int :-2147483648~2147483647(-2的31次方~2的31次方-1)
4.long :-9223372036854774808~9223372036854774807(-2的63次方~2的63次方-1)
5.float:3.402823e+38~1.401298e-45和-3.402823e+38~-1.401298e-45 (e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方)
6.double:1.797693e+308~4.9000000e-324和-1.797693e+308~-4.9000000e-324(同上)
* */
public void a(){
// 如果是赋值时超出范围会直接报错、如果是运行是进行加减导致超出范围最大值变为最小值,最小值变为最大值。
byte b1=127; // 8字节,-128~127
byte b2=-128;
short s1=32767;
short s2=-32768;
int i1=2147483647;
int i2=-2147483648;
byte j=2;
for (int i=0;i<2;i++){
b1++;
b2--;
s1++;
s2--;
i1++;
i2--;
System.out.println("byte(max):"+b1+" byte(min) "+b2);
System.out.println("short(max):"+s1+" short(min) "+s2);
System.out.println("int(max):"+i1+" int(min) "+i2);
}
}
结果:
byte(max):-127 byte(min) 127
short(max):-32768 short(min) 32767
int(max):-2147483648 int(min) 2147483647
byte(max):-125 byte(min) 126
short(max):-32767 short(min) 32766
int(max):-2147483647 int(min) 2147483646