在java中有基本数据类型和引用类型两种,今天来说下基本数据类型和其对应的包装类的之间的关系。

一、概述

java中的基本数据类型有八种,分别是char、byte、short、int、long、float、double,boolean。其中这八种基本类型都有其对应的包装类,分别是Character、Byte、Short、Integer、Long、Float、Double、Boolean。八种基本数据类型中byte、short、int、long都是表示的整型(无小数位),float、double表示的是浮点数(俗称小数),char表示的是单个字符,boolean表示的是布尔型。

在java中整型默认的基本数据类型为int,浮点型默认为double。

二、详述

何为包装类

都知道java种8种数据类型都有其对应的包装类,那么何为包装类,如何去理解包装类。

所谓包装类其实很好理解,只要从字面量来理解即可,举个例子,就是拿一个箱子把水杯包装起来,这就可以类比包装类。关键要知道包装类包装的是什么东西,是如何包装的。

下面看Integer类的定义,

/**
* The value of the {@code Integer}.
*
* @serial
*/
private final int value;

在Integer类中有int类型的value,那么包装的便是基本类型int,把value进行了包装,再看Double类

/**
* The value of the Double.
*
* @serial
*/
private final double value;

在Double类中同样有一个Double类型的value,那么包装的便是double基本类型。

从上面我们知道了,包装类包装的其实就是基本类型,和基本类型的区别是包装类是一个引用类型,很好的诠释了java的封装的特性,把相应的基本类型进行了封装,并提供了一些共用的操作;

数据长度

八种基本数据类型每个所能表示的数据范围不同,在其相应的包装类中都有其最大值和最小值的定义。且通过

byte占8位,也就是1个字节,且有符号,以二进制补码表示;因为有符号,所以符号位占1位,有效的数字位未7位,数据范围未-128~127,即,-2^7~2^7-1,因为中间有0,所以最大需要减1

short占16位,也就是2个字节,且是有符号,以二进制补码表示;因为有符号,所以符号位占1位,有效的数字位未15位,数据范围未-2^15~2^15-1;

int占32位,也就是4个字节,且是有符号,以二进制补码表示;因为有符号,所以符号位占1位,有效的数字位未31位,数据范围未-2^31~2^31-1;

long占64位,也就是8个字节,且是有符号,以二进制补码表示;因为有符号,所以符号位占1位,有效的数字位未63位,数据范围未-2^63~2^63-1;

float占32位,也就是4个字节,无符号,是单精度的;怎么存储的?

double占64位,也就是8个字节,无符号,是双精度的;

char是一个单一的 16 位 Unicode 字符;

boolean表示一位的信息只有true和false;

自动装箱与拆箱

何为自动装箱与拆箱,其实这是针对基本数据类型和包装类型来说的,从基本数据类型到包装类型是装箱,从包装类型到基本数据类型是拆箱,而这个转变是自动的,无需程序员手动转化,

public void execPackAndUnpack(){
int b=1;
//调用方法,传入int类型的数值,自动装箱位Integer类型
autoPackAndUnpack(b); } public void autoPackAndUnpack(Integer i){
//进行算术加运算,将i自动拆箱为int执行相加操作
int a=i+1;
System.out.println(a);
}

上面的两个方法便是很好的自动装箱和拆箱的例子,那么java为自动装箱和拆箱做了哪些事那。

其实自动装箱,调用的是包装类的静态方法。以上面的int类型为例,自动装箱调用的Integer.valueOf()方法,而自动拆箱调用的Integer.intValue()方法,下面看这两个方法的定义,

valueOf(int i)

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

从上面可以看到最后返回的是一个Integer的对象,完成了装箱的功能。

intValue()

public int intValue() {
return value;
}

可以看到最后返回的是int类型,完成了拆箱。

valueOf方法

在每个包装类中都有valueOf方法,看下Integer中的valueOf方法

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

看到最后使用i构造了一个Integer对象,再看下Double类中的valueOf方法,

public static Double valueOf(double d) {
return new Double(d);
}

看到使用d构造了一个Double对象。

很多资料把valueOf方法作为工厂方法来讲解,当然这里也可以这样理解,就是通过基本类型来构造相应的包装类。

parseXXX方法

parseXXX方法在包装类中很常见,像Integer有以下方法,

在Double类中有,

public static double parseDouble(String s) throws NumberFormatException {
return FloatingDecimal.parseDouble(s);
}

parseXXX方法就是把字符串类型的参数转化为相应的基本类型。

XXXValue方法

在包装类中经常看到这样的方法,

这些方法的意思是把一种类型强转为另一种类型,看Integer中的方法

public byte byteValue() {
return (byte)value;
}

就是把类型为int的value强转为byte,在强转的时候类型转换异常

public double doubleValue() {
return (double)value;
}

把类型为int的value强转为double。其他的方法也是类似的,都是强转。

为什么要在包装类中要包装强转的方法那,在使用基本数据类型时,可以使用下面的方式,

double b=89.0;
int a= (int) b;

由于是包装类,又包装了基本类型,那么就应该具备强转为其他类型的方法,所以提供了XXXValue方法,作为包装类型向其他基本类型的强转。

三、总结

重点分析了以下内容,

java中的包装类,如何理解包装类;

java中基本数据类型及对应的包装类;

包装类中常用的valueOf、parseXXX、XXXValue方法;(XXX代表byte、short、int、float等)

有不正之处欢迎指正,感谢!

java基础之一:基本数据类型的更多相关文章

  1. Java基础之基本数据类型

    前言:Java内功心法之基本数据类型,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 变量就是申请内存来存储值.也就是说,当创建变量的时候,需 ...

  2. java基础(三) -基本数据类型

    变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过定义不同类型的变量,可以在内存 ...

  3. Java基础笔记之数据类型

    一.数据类型 (一)8种基本数据类型(内置数据类型\C#中为值类型) 字符长度:1byte = 8 bit; 布尔:可认为是 1byte (8 bit);

  4. Java基础学习之数据类型、基础语法与数组(3)

    目录 1.数据类型 1.1.基本数据类型 1.2.引用数据类型 1.3.自动装箱与拆箱 2.基础语法 2.1.标识符 2.2.修饰符 2.2.1.访问控制修饰符 2.2.2.非访问控制修饰符 2.3. ...

  5. JAVA基础知识之数据类型

    JAVA的数据类型知识点主要包括基本数据类型,包装类,字符串类(String,StringBuffer, StringBuilder区别和用法),数组,数据类型转换等等,暂时只想到这么多,后面会再补充 ...

  6. 黑马程序员——JAVA基础之基本数据类型包装类和1.5JDK新特性装箱

    ------- android培训.java培训.期待与您交流! ---------- 基本数据类型包装类: byte Byte short Short int Integer char Charac ...

  7. Java基础——变量、数据类型

    一 .变量 1.计算机的内存类似于人的大脑,计算机使用内存来记忆大量运算时要使用数据.内存是一个物理设备,如何来存储一个数据呢?很简单,把内存想象成一间旅馆,要存储的数据就好比要住宿的客人. 首先,旅 ...

  8. Java基础之基本数据类型的包装类型

    Java的基本数据类型的包装数据类型有多种: int Integer,short Short,boolean Boolean,float Float,double Double等等. Java包装类数 ...

  9. Java基础 变量和数据类型及相关操作

    Java基本语法: 1):Java语言严格区分大小写,好比main和Main是完全不同的概念. 2):一个Java源文件里可以定义多个Java类,但其中最多只能有一个类被定义成public类.若源文件 ...

  10. (6)java基础知识-基本数据类型、数据类型转换

    一.基本数据类型 基本的数据类型一共有四类八种 1.整型 byte:  1字节 取值范围 -128~127 short: 2字节    取值范围 -32768~32767 int:     4字节 取 ...

随机推荐

  1. 【Java】类的结构

    类与对象 类中主要包括五种结构,下面进行对这五种结构进行详细的介绍. 1. 面向对象与面向过程 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做. 面向对象:强调具备了功能的对象,以类/对象为 ...

  2. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  3. PhpExcel PhpSpreadsheet 锁定单元格 正确做法!!

    首先声明 PhpExcel 已经停止更新,转而代之的是 PhpSpreadsheet : 但是 !!不必担心 PhpSpreadsheet 包含了大部分的 PhpExcel 的功能 : //code ...

  4. 知识全聚集 .Net Core 技术突破 | 简单说说工作单元

    知识全聚集 .Net Core 技术突破 | 简单说说工作单元 教程 01 | 模块化方案一 02 | 模块化方案二 其他教程预览 分库分表项目实战教程 Git地址: https://github.c ...

  5. 年轻人的第一个 Docker 应用,大大提高生产力!

    上一篇:年轻人的第一个 Spring Boot 应用! 哈哈,标题我抄了雷总的,不重要哦,重要的是 Docker 真的很年轻,虽然现在才不到 8 岁,但却是个冉冉升起的巨星,火得一塌糊涂. 这几年 D ...

  6. 使用邮箱验证登录后台ssh,再也不怕被人攻击服务器了!

    目录 前言 安装教程 前言 之前写过使用用户名密码,以及扫描二维码方式验证后台登录ssh的文章:[点击跳转]. 但是这样还是不太保险,也存在被人利用的情况,因为别人破解你的后台你压根不知道.因此想到使 ...

  7. Numpy_02

    # 十,使用数组进行文件输入和输出 # Numpy 可以将数据以[文本]或[二进制]的形式存入硬盘,或从硬盘载入. # 由于大部分用户更倾向于使用pandas等其他工具来载入文本或表格型数据,因此,这 ...

  8. excel导出csv包括逗号等的处理

    /** * @Title: trimRubbishChar * @Description: 导出的时候需要对一格的内容进行检查,看是否有非法字符,以免串行 * @Since: 2016年8月2日 下午 ...

  9. 4. Spark在集群上运行

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第四部分是讲的是Spark在集群上运行的知识点. 一.Spark应用组件介绍 二.Spark在集群运行过程 三.Spark配置 ...

  10. epoll oneshot

    /* Epoll private bits inside the event mask */#define EP_PRIVATE_BITS (EPOLLWAKEUP | EPOLLONESHOT | ...