java中的基本数据类型?各占多少位?多少字节?取值范围?
1.Int 32 4 -2,147,483,648 ~ 2,147,483,647
2.Short 16 2 -32768 ~ 32678
3.long 64 8 -9,223,372,036,854,775,808~+9,223,372,036,854,775,807
4.float 32 4 -3,40292347E+38 ~ +3,40292347E+38
5.double 64 8 -1.79769313486231576E+308 ~ 1.79769313486231576E+308
6.char 16 2 ‘\u0000′ ~ ‘\uFFFF’
7.boolean 1 0.125 true/false
8.byte 8 1 -128 ~ 127
public class Test {
public static void main(String[] args) {
// 给byte类型变量赋值时,数字后无需后缀标识
byte byte_a = 1;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// byte byte_b = 1000;
// 把一个long型值赋值给byte型变量,编译时会报错,即使这个值没有超出byte类型的取值范围
// byte byte_c = 1L;
// 给short类型变量赋值时,数字后无需后缀标识
short short_a = 1;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// short short_b = 70000;
// 把一个long型值赋值给short型变量,编译时会报错,即使这个值没有超出short类型的取值范围
// byte short_c = 1L;
// 给int类型变量赋值时,数字后无需后缀标识
int int_a = 1;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// int int_b = 2200000000;
// 把一个long型值赋值给int型变量,编译时会报错,即使这个值没有超出int类型的取值范围
// int int_c = 1L;
// 可以把一个int型值直接赋值给long型变量,数字后无需后缀标识
long long_a = 1;
// 如果给long型变量赋予的值超出了int型值的范围,数字后必须加L(不区分大小写)标识
long long_b = 2200000000L;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// long long_c = 9300000000000000000L;
// 可以把一个int型值直接赋值给float型变量
float float_a = 1;
// 可以把一个long型值直接赋值给float型变量
float float_b = 1L;
// 没有F(不区分大小写)后缀标识的浮点数默认为double型的,不能将它直接赋值给float型变量
// float float_c = 1.0;
// float型数值需要有一个F(不区分大小写)后缀标识
float float_d = 1.0F;
// 把一个double型值赋值给float型变量,编译时会报错,即使这个值没有超出float类型的取值范围
// float float_e = 1.0D;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// float float_f = 3.5000000E38F;
// 可以把一个int型值直接赋值给double型变量
double double_a = 1;
// 可以把一个long型值直接赋值给double型变量
double double_b = 1L;
// 可以把一个float型值直接赋值给double型变量
double double_c = 1F;
// 不带后缀标识的浮点数默认为double类型的,可以直接赋值
double double_d = 1.0;
// 也可以给数字增加一个D(不区分大小写)后缀标识,明确标出它是double类型的
double double_e = 1.0D;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// double double_f = 1.8000000000000000E308D;
// 把一个double型值赋值给一个byte类型变量,编译时会报错,即使这个值没有超出byte类型的取值范围
// byte byte_d = 1.0D;
// 把一个double型值赋值给一个short类型变量,编译时会报错,即使这个值没有超出short类型的取值范围
// short short_d = 1.0D;
// 把一个double型值赋值给一个int类型变量,编译时会报错,即使这个值没有超出int类型的取值范围
// int int_d = 1.0D;
// 把一个double型值赋值给一个long类型变量,编译时会报错,即使这个值没有超出long类型的取值范围
// long long_d = 1.0D;
// 可以用字符初始化一个char型变量
char char_a = 'a';
// 也可以用一个int型数值初始化char型变量
char char_b = 1;
// 把一个long型值赋值给一个char类型变量,编译时会报错,即使这个值没有超出char类型的取值范围
// char char_c = 1L;
// 把一个float型值赋值给一个char类型变量,编译时会报错,即使这个值没有超出char类型的取值范围
// char char_d = 1.0F;
// 把一个double型值赋值给一个char类型变量,编译时会报错,即使这个值没有超出char类型的取值范围
// char char_e = 1.0D;
// 编译器会做范围检查,如果赋予的值超出了范围就会报错
// char char_f = 70000;
}
}
从上面的例子中我们可以得出如下几条结论:
- 1.未带有字符后缀标识的整数默认为int类型;未带有字符后缀标识的浮点数默认为double类型。
- 2.如果一个整数的值超出了int类型能够表示的范围,则必须增加后缀“L”(不区分大小写,建议用大写,因为小写的L与阿拉伯数字1很容易混淆),表示为long型。
- 3.带有“F”(不区分大小写)后缀的整数和浮点数都是float类型的;带有“D”(不区分大小写)后缀的整数和浮点数都是double类型的。
- 4.编译器会在编译期对byte、short、int、long、float、double、char型变量的值进行检查,如果超出了它们的取值范围就会报错。
- 5.int型值可以赋给所有数值类型的变量;long型值可以赋给long、float、double类型的变量;float型值可以赋给float、double类型的变量;double型值只能赋给double类型变量。