Java 基本数据类型和包装类
1 Java 基本数据类型
1.1 八种基本数据类型
- 四种整数类型 (byte、short、int、long)
- 两种浮点数类型 (float、double)
- 一种字符类型(char)
- 一种布尔类型(boolean)
1.2 基本用法及说明
byte:
- 8 位,占 1 字节
- 最小值是 -128(-2^7),最大值是 127(2^7 - 1)
- 默认值是 0
- 例子:byte a = 100,byte b = -50
short:
- 16位,占 2 字节
- 最小值是 -32768(-2^15),最大值是 32767(2^15 - 1);
- 默认值是0;
- 例子:short s = 1000,short r = -20000
int:
- 32位,占 4 字节
- 最小值是-2,147,483,648(-2^31)
- 最大值是2,147,485,647(2^31 - 1)
- 一般地整型变量默认为int类型;
- 默认值是0;
- 例子:int a = 100000, int b = -200000
long:
- 64位,占 8 字节
- 最小值是-9,223,372,036,854,775,808(-2^63)
- 最大值是9,223,372,036,854,775,807(2^63 -1)
- 默认值是 0L
- 例子: long a = 100000L,int b = -200000L
float:
- 32位,占4字节
- -3.4E38- 3.4E38… 浮点数是有舍入误差的
- 默认值是 0.0f
- 例子:float f1 = 234.5f,float f = 6.26F
double:
- 64位,8位
- 浮点数的默认类型为double类型
- 默认值是 0.0d
- 例子:double d1 = 123.4
boolean:
- 只有两个取值:true 和 false
- 默认值是false;
- 例子:boolean one = true, two = false
Java 规范中,没有明确指出 boolean 的大小。在《Java虚拟机规范》给出了 4 个字节,和 boolean 数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。
char:
- char 类型是一个单一的16位Unicode字符;用 ''表示一个字符
- 可以当整数来用,它的每一个字符都对应一个数字
1.3 八种包装类型
1.3.1 包装类
- byte --> Byte
- short --> Short
- int --> Integer
- long --> Long
- float --> Float
- double --> Double
- char --> Character
- boolean --> Boolean
1.3.2 包装类的构造方法
-
所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
public Type(type value)
如:Integer i=new Integer(1); -
注意事项:
(1)Boolean 类构造方法参数为 String 类型时,若该字符串内容为 true (不考虑大小写),则该 Boolean 对象表示 true,否则表示 false。
(2)当 Number 包装类构造方法参数为 String 类型时,字符串不能为 null, 且该字符串必须可解析为相应的基本数据类型的数据,否则编译通过,运行时NumberFormatException异常。
2 int 和 Integer 有什么区别
2.1 区别
- int 为基本类型,Integer 为包装类型,Integer 有很多方法可以使用。
- int 可以通过 Integer.valueOf(xx) 转成 Integer
- Integer 可以调用 intValue()方法得到 int值
- Java 1.5 之后不用显示调用,JVM 会自动进行拆装箱
2.2 注意事项
- 使用 Integer 和 int 直接比较大小时需要判断 Integer 的值是否为null。因为 Integer 会调用 intValue()方法 拆箱为 int,为 null 时会报空指针异常。
2.3 一个 Integer 值比较不注意的问题
public void test2() {
Integer a1 = Integer.valueOf(60);
Integer b1 = 60;
System.out.println("1:="+(a1 == b1));
Integer a2 = 60;
Integer b2 = 60;
System.out.println("2:="+(a2 == b2));
Integer a3 = new Integer(60);
Integer b3 = 60;
System.out.println("3:="+(a3 == b3));
Integer a4 = new Integer(60);
Integer b4 = new Integer(60);
System.out.println("4:="+(a4 == b4));
Integer a5 = 129;
Integer b5 = 129;
System.out.println("5:="+(a5 == b5));
}
结果:
1:=true
2:=true
3:=false
4:=false
5:=false
Java 中 Integer 类型对于 -128 - 127 之间的数是缓冲区取的。所以用等号比较是一致的。
但对于不在这区间的数字是在堆中 new 出来的。所以地址空间不一样,也就不相等。