JAVA面试题解惑系列八聊聊基本类型内置类型Word文档格式.docx
《JAVA面试题解惑系列八聊聊基本类型内置类型Word文档格式.docx》由会员分享,可在线阅读,更多相关《JAVA面试题解惑系列八聊聊基本类型内置类型Word文档格式.docx(42页珍藏版)》请在冰点文库上搜索。
![JAVA面试题解惑系列八聊聊基本类型内置类型Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/3f3bc0c7-9b88-479c-a9a7-ac7d3343d1a1/3f3bc0c7-9b88-479c-a9a7-ac7d3343d1a11.gif)
Byte.SIZE);
5.
包装类:
java.lang.Byte"
);
6.
最小值:
Byte.MIN_VALUE="
Byte.MIN_VALUE);
7.
最大值:
Byte.MAX_VALUE="
Byte.MAX_VALUE);
8.
System.out.println();
9.
10.
short
11.
short
Short.SIZE);
12.
java.lang.Short"
13.
Short.MIN_VALUE="
Short.MIN_VALUE);
14.
Short.MAX_VALUE="
Short.MAX_VALUE);
15.
16.
17.
int
18.
int
Integer.SIZE);
19.
java.lang.Integer"
20.
Integer.MIN_VALUE="
Integer.MIN_VALUE);
21.
Integer.MAX_VALUE="
Integer.MAX_VALUE);
22.
23.
24.
long
25.
long
Long.SIZE);
26.
java.lang.Long"
27.
Long.MIN_VALUE="
Long.MIN_VALUE);
28.
Long.MAX_VALUE="
Long.MAX_VALUE);
29.
30.
31.
float
32.
float
Float.SIZE);
33.
java.lang.Float"
34.
Float.MIN_VALUE="
Float.MIN_VALUE);
35.
Float.MAX_VALUE="
Float.MAX_VALUE);
36.
37.
38.
double
39.
double
Double.SIZE);
40.
java.lang.Double"
41.
Double.MIN_VALUE="
Double.MIN_VALUE);
42.
Double.MAX_VALUE="
Double.MAX_VALUE);
43.
44.
45.
char
46.
char
Character.SIZE);
47.
java.lang.Character"
48.
以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
49.
Character.MIN_VALUE="
50.
(int)
Character.MIN_VALUE);
51.
以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
52.
Character.MAX_VALUE="
53.
Character.MAX_VALUE);
54.
}
55.}
publicclassPrimitiveTypeTest{
publicstaticvoidmain(String[]args){
//byte
System.out.println("
byte二进制位数:
+Byte.SIZE);
+Byte.MIN_VALUE);
+Byte.MAX_VALUE);
System.out.println();
//short
short二进制位数:
+Short.SIZE);
+Short.MIN_VALUE);
+Short.MAX_VALUE);
//int
int二进制位数:
+Integer.SIZE);
+Integer.MIN_VALUE);
+Integer.MAX_VALUE);
//long
long二进制位数:
+Long.SIZE);
+Long.MIN_VALUE);
+Long.MAX_VALUE);
//float
float二进制位数:
+Float.SIZE);
+Float.MIN_VALUE);
+Float.MAX_VALUE);
//double
double二进制位数:
+Double.SIZE);
+Double.MIN_VALUE);
+Double.MAX_VALUE);
//char
char二进制位数:
+Character.SIZE);
//以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
+(int)Character.MIN_VALUE);
//以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
+(int)Character.MAX_VALUE);
}
}
运行结果:
1.基本类型:
8
2.包装类:
java.lang.Byte
3.最小值:
Byte.MIN_VALUE=-128
4.最大值:
Byte.MAX_VALUE=127
5.
6.基本类型:
16
7.包装类:
java.lang.Short
8.最小值:
Short.MIN_VALUE=-32768
9.最大值:
Short.MAX_VALUE=32767
10.
11.基本类型:
32
12.包装类:
java.lang.Integer
13.最小值:
Integer.MIN_VALUE=-2147483648
14.最大值:
Integer.MAX_VALUE=2147483647
15.
16.基本类型:
64
17.包装类:
java.lang.Long
18.最小值:
Long.MIN_VALUE=-9223372036854775808
19.最大值:
Long.MAX_VALUE=9223372036854775807
20.
21.基本类型:
22.包装类:
java.lang.Float
23.最小值:
Float.MIN_VALUE=1.4E-45
24.最大值:
Float.MAX_VALUE=3.4028235E38
25.
26.基本类型:
27.包装类:
java.lang.Double
28.最小值:
Double.MIN_VALUE=4.9E-324
29.最大值:
Double.MAX_VALUE=1.7976931348623157E308
30.
31.基本类型:
32.包装类:
java.lang.Character
33.最小值:
Character.MIN_VALUE=0
34.最大值:
Character.MAX_VALUE=65535
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少倍。
比如3.14E3就是3.14×
1000=3140,3.14E-3就是3.14/1000=0.00314。
大家将运行结果与上表信息仔细比较就会发现float、double两种类型的最小值与Float.MIN_VALUE、Double.MIN_VALUE的值并不相同,这是为什么呢?
实际上Float.MIN_VALUE和Double.MIN_VALUE分别指的是float和double类型所能表示的最小正数。
也就是说存在这样一种情况,0到±
Float.MIN_VALUE之间的值float类型无法表示,0到±
Double.MIN_VALUE之间的值double类型无法表示。
这并没有什么好奇怪的,因为这些范围内的数值超出了它们的精度范围。
基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。
从Java5.0(1.5)开始,JAVA虚拟机(JavaVirtualMachine)可以完成基本类型和它们对应包装类之间的自动转换。
因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类,但这并不意味着你可以通过基本类型调用它们的包装类才具有的方法。
另外,所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。
各种数值类型之间的赋值与转换遵循什么规律呢?
我们来看下面这个例子:
给byte类型变量赋值时,数字后无需后缀标识
byte_a
=
1;
编译器会做范围检查,如果赋予的值超出了范围就会报错
byte_b
1000;
把一个long型值赋值给byte型变量,编译时会报错,即使这个值没有超出byte类型的取值范围
byte_c
1L;
给short类型变量赋值时,数字后无需后缀标识
short_a
short_b
70000;
把一个long型值赋值给short型变量,编译时会报错,即使这个值没有超出short类型的取值范围
short_c
int_a
int_b
2200000000;
把一个long型值赋值给int型变量,编译时会报错,即使这个值没有超出int类型的取值范围
int_c
可以把一个int型值直接赋值给long型变量,数字后无需后缀标识
long_a
如果给long型变量赋予的值超出了int型值的范围,数字后必须加L(不区分大小写)标识
long_b
2200000000L;
long_c
9300000000000000000L;
可以把一个int型值直接赋值给float型变量
float_a
可以把一个long型值直接赋值给float型变量
float_b
没有F(不区分大小写)后缀标识的浮点数默认为double型的,不能将它直接赋值给float型变量
float_c
1.0;
float型数值需要有一个F(不区分大小写)后缀标识
float_d
1.0F;
把一个double型值赋值给float型变量,编译时会报错,即使这个值没有超出float类型的取值范围
float_e
1.0D;
float_f
3.5000000E38F;
可以把一个int型值直接赋值给double型变量
double_a
可以把一个long型值直接赋值给double型变量
double_b
可以把一个float型值直接赋值给double型变量
double_c
1F;
不带后缀标识的浮点数默认为double类型的,可以直接赋值
double_d
也可以给数字增加一个D(不区分大小写)后缀标识,明确标出它是double类型的
double_e
55.
double_f
1.8000000000000000E308D;
56.
57.
把一个double型值赋值给一个byte类型变量,编译时会报错,即使这个值没有超出byte类型的取值范围
58.
byte_d
59.
把一个double型值赋值给一个short类型变量,编译时会报错,即使这个值没有超出short类型的取值范围
60.
short_d
61.
把一个double型值赋值给一个int类型变量,编译时会报错,即使这个值没有超出int类型的取值范围
62.
int_d
63.
把一个double型值赋值给一个long类型变量,编译时会报错,即使这个值没有超出long类型的取值范围
64.
long_d
65.
66.
可以用字符初始化一个char型变量
67.
char_a
'
a'
;
68.
也可以用一个int型数值初始化char型变量
69.
char_b
70.
把一个long型值赋值给一个char类型变量,编译时会报错,即使这个值没有超出char类型的取值范围
71.
char_c
72.
把一个float型值赋值给一个char类型变量