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 出来的。所以地址空间不一样,也就不相等。

经验分享 程序员 微信小程序 职场和发展