Java基本数据类型与包装类
java基本数据类型
java是一种几乎纯洁的面向对象编程语言,为了编程方便还是引入了基本数据类型。基本数据类型一共有8种,分为数值型(byte、short、int、long、float、double)、字符型(char)、布尔型(boolean)。数值类型分为整数类型(byte、short、int、long)、浮点型(单精度浮点型:float)、(双精度浮点型:double)。它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。
名称 | 字节 | 位(bit) | 最小值 | 最大值 |
---|---|---|---|---|
byte | 1 | 8 | -128 | 127 |
short | 2 | 16 | -2^15 | 2^15-1 |
int | 4 | 32 | -2^31 | 2^31-1 |
long | 8 | 64 | -2^63 | 2^63-1 |
float | 4 | 32 | IEEE754 | IEEE754 |
double | 8 | 64 | IEEE754 | IEEE754 |
boolean | — | — | — | — |
char | 2 | 16 | Unicode 0 | Unicode(2^16-1) |
在有的书中void也算基本的数据类型
,java中有两种数据类型,即基本数据类型和引用数据类型,那么java中的void是什么呢?
按照在方法申明的语法可以看出方法的定义必须有返回值,需要写出方法返回值的类型,
当方定义时用void修饰时,表示没有返回值,那么由此可见void的应该算是一种数据类型
void也有对应的包装类java.lang.Void,不过我们无法直接对它们进行操作。
public final class Void extends Object {
/*
* The Void class cannot be instantiated.
*/
private Void() {
}
}
Void类是用final关键字修饰的,不能被扩展,构造是私有的,不可以被实例化。
Void类是一个不可实例化的占位符类,用来保存一个引用代表了Java关键字void的Class对象。
那如果有人问起void怎么办:你只要记住void就是空,在方法声明的时候表示该方法没有返回值
我们来看几个问题
问题1:int的最大值+1和int最大值-1是多少?
int的最大值+1和int最大值-1是多少?
我一开始以为,会出现内存溢出的情况,但是实际上不会出现这种情况。
我们来测试一下:
@Test
public void test1() {
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("int的最大值为:"+max);
System.out.println("int的最大值+1:"+(max+1));
System.out.println("int的最小值为:"+min);
System.out.println("int的最小值-1:"+(min-1));
}
运行结果:
为什么会出现这种情况?
int型变量采用补码形式来表示数值。对于一个二进制数,正数的补码是其本身,负数的补码是所有二进制位取反再加一。
int类型中正数和负数是如何表示的:
int变量中,第一位是符号位(0表示正数,1表示负数)。
比如说10
10的二进制码是:
000 0000 0000 0000 0000 0000 0000 1010
正数补码是它本身:
000 0000 0000 0000 0000 0000 0000 1010
第一位表示符号,所以10的在32位内存的二进制码为:
0000 0000 0000 0000 0000 0000 0000 1010
-10
-10绝对值的二进制码为:
000 0000 0000 0000 0000 0000 0000 1010
负数的补码是取反:
111 1111 1111 1111 1111 1111 1111 0101
负数的补码是取反+1:
111 1111 1111 1111 1111 1111 1111 0110
第一位表示符号,所以10的在32位内存的二进制码为:
1111 1111 1111 1111 1111 1111 1111 0110
int类型最大的数怎么表示?
正数,符号位为0,所以32位二进制最大的数为:
0111 1111 1111 1111 1111 1111 1111 1111 即2^31-1
int类型最小的数怎么表示?
负数,符号位为1,所以32位二进制最小的数为:
1000 0000 0000 0000 0000 0000 0000 0000 即-2^31
int最大值+1
0111 1111 1111 1111 1111 1111 1111 1111 加 1
1000 0000 0000 0000 0000 0000 0000 0000,是int表示的最小负数
int最小值-1
1000 0000 0000 0000 0000 0000 0000 0000 减 1
0111 1111 1111 1111 1111 1111 1111 1111,是int表示的最大正数
问题2:short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
解析: 对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
问题3:以下程序的输出结果是?