目录
数据类型
数据类型 | 所占字节数 | 最小值 | 最大值 | 默认值 |
byte | 1个字节(8位) | -128 | 127 | 0 |
short | 2个字节(16位) | -32768 | 32767 | 0 |
int | 4个字节(32位) | -2,147,483,648(-2^31) | 2,147,483,647(2^31 - 1) | 0 |
long | 8个字节(64位) | -2^63 | 2^63 -1 | 0L |
float | 4个字节(32位) | 1.4E-45 |
3.4028235E38 |
0.0f |
double | 8个字节(64位) | 4.9E-324 |
1.7976931348623157E308 |
0.0d |
char | 2个字节(16位) | 0 | 65535 |
‘u0000’ |
boolean | 1个字节(8位) | false | true | false |
隐含的强制类型转换
整数字面量默认位 int 型,小数字面量默认为 double 型。
类型转换规则:
- 1. 不能对boolean类型进行类型转换。
- 2. 不能把对象类型转换成不相关类的对象。
- 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 4. 转换过程中可能导致溢出或损失精度,例如:
int i =128;
byte b = (byte)i;
- 因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
自动类型转换
(1)整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
(2)转换从低级到高级。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
(3)byte,short,char之间进行运算时,都会先转化为int在进行计算。
(4)计算机可以自动将低类型转换为高类型,但是不能将高类型转换为低类型。
(5)当整数字面值没有超过byte,short,char,int范围时,可以直接赋值给byte,short,char,int。
(6) 当整数字面值没有超过int范围时,可以直接赋值给long,如果超过了int范围,但是没有超过long范围,可以在整数字面值后面加上L或l。
(7)小数字面值赋值给float时需要在小数末尾加上F或f。
例:
class A { public static void main(String[] a) { long b = 2147483648; System.out.println(b); //错误 //2147483648超出了int型 //应该在2147483648后面加上L byte c = 10; System.out.println(c); //正确 byte d = c / 2; System.out.println(d); //错误 //c/2做运算时,会被当做int处理,高类型不能赋值给低类型 long e = c / 2; System.out.println(d); //正确 //c/2做运算,被当做int处理,低类型可以赋值给高类型,存在类型转换 float f = 3.2; System.out.println(f); //错误 //应该在3.2后面加上F或者f byte g = 2; byte h = 2; byte i = g + h; System.out.println(i); //错误 //g和h都是byte类型,进行运算时都会先转化为int类型,结果也为int类型,int类型不能赋值给byte类型 double j = 10 / 3; System.out.println(j); //正确,编译结果为3.0 //10和3都是int类型,运算结果还是int类型,int类型可以转化为double类型,存在类型转换 j = 10.0 / 3; System.out.println(j); //正确,编译结果为3.3333333333333335 //10.0是double类型,3是整型,运算结果也是double类型 byte k = 4; k = k + 4; System.out.println(k); //错误 //k + 4的类型为int型,int类型无法转化成byte类型 k+ = 4; System.out.println(k); //正确,编译结果为8 //k+ = 4 ====> k = (byte)(k + 4); } }