面试之java基础:8个基本数据类型

  • 概念
  • 基本数据类型及描述
  • 封装类
  • 自动拆箱和自动装箱(JDK1.5版本后)


概念

在Java语言中有两种数据类型,为基本数据类型和引用数据类型。基本数据类型总共有8种,分别为byte、short、int、long、float、double、boolean、char。在程序开发过程中,我们通过以上8个关键字来定义存储对应类型数据的变量。

基本数据类型及描述

数据类型

字节长度

范围

默认值

包装类

int

4

-231~231-1

0

Integer

short

2

-215~215-1

0

Short

long

8

-263~263-1

0L或0l

Long

byte

1

-27~27-1

0

Byte

float

4

32位IEEE7754单精度范围

0.0F或0.0f

Float

doublle

8

64位IEEE7754双精度范围

0.0

Double

char

2

Unicode[0,65535]

u0000

Character

boolean

1

true或false

false

Boolean

以上的基本数据类型可以分为四类:
(1)int长度数据类型:byte、short、int、long
这四个基本数据类型的取值范围:b=字节长度*8,范围为-2b-1~2b-1-1
(2)小数点类型:float单精度、double双精度
(3)boolean类型
(4)char类型:使用Unicode编码的字符类型

封装类

为什么需要封装类?

①基本数据类型是值传递,封装类是引用传递,在实际运用中,如果你想用一个int对象的引用,那么就需要使用到封装类。
②基本数据类型不能调用方法,而封装类提供了很多的方法,比如valueOf()、toString()等,使得程序中处理起数据更简便。

注意:Int和char的包装类为Integer和Character,其他包装类都是基本类型首字母大写

装箱
Integer i = new Integer(10);
拆箱
int a = i.intValue();

自动拆箱和自动装箱(JDK1.5版本后)

封装类变为基本数据类型的过程叫做自动拆箱;基本数据类型变为封装类的过程叫做自动装箱

Integer i =10;
int a = i;

自动拆箱和装箱的好处:
①代码简洁:由于自动拆装箱,使得Integer和int可以互相转化,我们可以直接对Integer进行加减等运算,转换的过程交给JVM。
②节约内存:
看一个代码示例:

Integer i1 = 44;
		Integer i2 = 44;
		Integer i3 = 130;
		Integer i4 = 130;
		System.out.println(i1==i2);//true
		System.out.println(i3==i4);	//false

为什么1和2是true的,到了3和4就成了false了?

来看一下Integer的源码

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
        //low为-128,high为127
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

通过观察源码,我们可以看到,当传入的int值为-128到127之间的时候,包装成封装类后会存放在内存中来给予重用,因为Integer比较的是引用对象,1和2的对象没有变过所以返回true;而当这个数值超过这个范围后,valueOf这个方法会生成一个新的Integer对象,所以两次定义就创建了两个对象,那么结果也就返回false了。

这个数据范围也叫做自动装箱池,对于创建一些小数值时的包装类对象时,就会进行复用,从而节省了内存和对象创建的开销。