前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA自学-8大基础数据类型详解

JAVA自学-8大基础数据类型详解

作者头像
IT学习日记
发布2022-09-13 11:25:01
8050
发布2022-09-13 11:25:01
举报
文章被收录于专栏:IT知识进阶学习
  • 🤟 博主介绍: CSDN、头条、知乎等平台优质博主,全网粉丝2w+

  上一篇文章我们讲到,学习一门新语言最好的方式就是通过类比思想,这样我们能够以最低的代价由浅入深地去学习、掌握一门新的语言。

  本篇文章中,我们也将依据此思想,去更加深入地认识JAVA中最基础的八大数据类型,看看它们在JAVA世界中都存在哪些用途。


在现实生活中,我们经常使用文字符号来描述具体的事情,记录我们的想法,用数字来代表金钱,数量等含义,在JAVA语言中,我们也有相似的概念,我们把这种能够表达特殊含义的具体类型称为数据类型。

  更形象的理解是,数据类型就好比我们生活中容纳物体的各种容器,但是不同的容器也有着不同的特征,从JAVA世界诞生之初,就存在着8种最基础的“容器”,也被称为基本数据类型,它们分别是byte、short、int、long、float、double以及char。

  后来,人们根据自己的习惯,也将它们简单归为以下4类:

  • 逻辑类型:boolean
  • 整数类型:byte、short、int、long
  • 字符类型:char
  • 浮点类型:float、double

  这8种数据类型都拥有着自己的特点,我们在刚开始学习的时候并不需要死记硬背地将它们记住,因为后续我们还会与它们相遇无数次,在使用过程中,它们的特点也会潜移默化地就牢记在我们脑海中。

或许有一些小伙伴会有疑问,为什么要区分成这么多数据类型,不能直接使用一种类型表示完所有的东西? 其实,将数据类型划分为不同种类的主要原因有:

  • 设计思想来源于生活,不同数据类型代表不同含义,更易于理解和学习
  • 不同数据类型能够表达的范围不一样,占用的空间也不一样,能够更好地提高内存空间的利用

在开始介绍基础数据类型之前,我们需要先简单认识下计算机存储信息的一个机制。

  我们日常生活中使用到的计算机一般是电子计算机,在底层它只能识别0和1两种数值(注意是电子计算机,其他的计算机如量子计算机不仅可以识别0和1,还可以对其中间的值进行运算处理),所以无论哪种数据类型,最终转换后都会转换成具体的二进制数(0和1)进行处理。

  **而计算机中,最小的存储信息单位是bit(比特),1bit (比特)能够存储 1个(0或者1)**,1 byte = 8bit(即1byte能够存储8个0或1的数值),1M = 1024 byte...,依次类推。了解完计算机存储的一个机制,下面我们就来认识JAVA中不同的数据类型以及它们所需的存储空间。


逻辑类型


boolean

  boolean从设计之初,它的取值就被固定了,只能取true或false。就好比生活中的真和假,有和无,是或否。

  使用场景:

  • 常量:final boolean isLoveYourGirlFriend = true
  • 变量:boolean isLoveYourGirlFriend; 后续可以重新赋值如:isLoveYourGirlFriend = false

  占用大小:

JAVA中的8种基础数据类型中,只有boolean类型没有给出明确的存储空间大小,因为实际上boolean类型在编译到JAVA的虚拟机时,是使用其他的数据类型进行替代的,因此,在网上关于boolean类型占用的空间大小也存在许多种说法:

  • 说法1: boolean类型占用空间大小为1bit(比特),因为它的取值只有true和false两种,在计算机中只需要1个bit便能表示,bit也是计算机最小的存储单元。
  • 说法2: boolean类型占用空间大小为1byte(字节),虽然boolean的取值只有true和false,但是计算机处理数据的最小单位是byte,而1byte = 8bit,所以,boolean类型在计算机中的存储形式实际上是:使用1个字节的最低位存储,其他的7位用0填充,如值为true时,存储的二进制为:0000 0001,值为false时,存储的二进制为:0000 0000。
  • 说法3: boolean类型占用空间大小为4byte(字节),理由来源于《JAVA虚拟机规范》一书中描述到:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中int数据类型来代替,而boolean数组将会被编译成Java虚拟机的byte数组,每个元素boolean占1byte(即8bit)”,由此我们可以推断出,单个boolean类型时占用4个字节,但是boolean数组时单个boolean只占用1个字节。
  • 三种说法,哪一种更具有权威性呢? 从上面的描述来看,当然是第三种,因为前两种更多是一种猜测,并没有实际的官方资料支撑,第三种是在具体书籍中有实际说明,更具有权威性。
  • 那为什么一定是使用int而不是使用其他的整数数据类型呢? 原因是在设计JAVA之初,流行的cpu处理器大多数是32位,对于这种cpu来说,一次性处理4个字节(4 * 8bit = 32位)数据方式更合理,更大程度上利用了cpu硬件的一些特点,从而达到更高存取的目的。

其实在oracle的官方文档中也有对boolean类型进行了简单的描述: boolean类型只有两种可能的值-真或假,这个数据类型用于做真假条件的简单标记跟踪,它的作用仅是用来标识这一个信息,但是它的大小并不是精确定义的。

image-20220123190217916
image-20220123190217916

  官方文档中对boolean也没有给出明确的大小定义,但是在JAVA虚拟机书籍中又说明了boolean是占用4个字节的,由此我们也能得出一个结论:boolean占用的存储空间实际上取决于JAVA虚拟机的具体实现来决定,1个还是4个字节都是存在可能性的,背后的逻辑其实是对执行效率和存储空间的一个取舍。

整数类型


byte、short、int、long都被归纳到整数类型中,它们的主要区别是能够描述的数值范围不一样,这样区分的目的主要是为了节省存储空间,因为表示的范围越大,需要占用内存的空间就越多,将整数类型划分为多种,可以让我们在编程的时候根据具体情况节省存储空间,表示范围从小到大依次为:byte < short < int < long。

如果定义的数值超越了具体数据类型的可以容纳值的范围(如用byte类型接收它范围之外的int类型的值),则会出现溢出,得到的结果是一个莫名其妙的值,这个因为涉及到的知识比较深,在有了一定基础后再继续进行讲解。

byte类型

  byte类型属于整数类型的一种,它的特点是来表示取值范围较小(-128 到127),就好像我们生活中的单车,一般只能承载1到2个人乘坐。

  使用举例:

  • 定义年龄为12岁:byte age = 12;

  占用大小:1byte,8位

short类型

  它也属于整数类型中的一员,不过它能够表示的范围比byte类型更大(-2^15^ ~ 2^15^-1),使用生活例子类比,它就像生活中的面包车,能够承载10到15人左右乘坐。

  使用举例:

  • 变量定义:short mobilePhone = 10086
  • 可以转换成byte类型:short age = 100; byte byteAge = (byte)age;

  占用大小:2byte,16位

int类型

它是整数类型中最常用到的数据类型,能够代表的取值范围为:-2^31^ ~ 2^31^-1,使用生活的例子来类比,它就像运货物的货车,能够承载50到100人左右。

  使用举例:

  • 变量定义:int money = 1000
  • 可以转换成byte、short类型,但是必须是在这两种类型的取值范围内,否则会出现溢出的情况。

  占用大小:4 byte, 32位

long类型

  它是整数类型中能代表取值范围最大的数据类型,取值范围为: -2^63^ ~ 2^63^-1,用生活的例子来类比,它就像我们常坐的动车、高铁,能够承载100人以上。

特点:在定义一个数值为long类型时,需要在这个数值后面添加字母l或者L来标识,建议是使用大写字母L标识,因为小写字母l会很容易和数值1混淆。

  使用举例:

  • 常量定义:long testLong = 1000L;
  • 可以转换成byte、short、int类型,但是必须是在这些类型的取值范围内,否则会出现溢出的情况。

  占用大小:8 byte, 64位

字符类型


char类型

它表示使用单引号括起来的Unicode表中的任意一个字符,没有负数的char,取值范围为:0 ~ 65535。 char类型的变量在内存中实际上存储的是字符对应的Unicode排序位置**,如定义字符char demo = ‘a’,实际上demo在内存中存储的值是97(97是字符a在Unicode编码中的排序位置)。

  如果想得到一个字符对应的Unicode排序位置,可以使用int类型显示转换,即使用int类型接收char字符类型的值,如:int p = 'a'(此时p得到的值就是97)。

image-20220123231454046
image-20220123231454046

  使用举例:

  • 变量定义:char home = '家'

  占用大小:2 byte, 16位

  Unicode编码表如下:

image-20220123231038055
image-20220123231038055

浮点类型


浮点类型代表的就是实数(即有理数和无理数的总称,更直地的说就是有限小数和无限小数的集合),在JAVA中区分为float类型和double类型。

float类型

float类型变量,在内存中需要占用4个字节,共32位(bit),它能够表示的数值范围是:-3.402 823*10^38^ ~ 3.402 823*10^38^,在存储float类型变量时保留8位有效数字(有效数字是指从左边第一个不为零的数起到最后不为零的数止),但是实际的精度取决于具体的数值,定义时需要使用字母f或者F标识。

  使用举例:

  • 变量定义:float money = 3.14f;
image-20220123233617542
image-20220123233617542

double类型

在内存中占用8个字节共64位,它能够表示的取值范围为:-1.7977*10^308^ ~ 1.7977*10^308^,在存储double类型数据的时候最大能够保留16位有效数值,实际的精度要取决于具体的数值。 在JAVA中,默认小数类型就是double,一般也使用d或者D来表示它是double类型。

  使用举例:

  • 变量定义:double money = 3.14或者double = 123.5D;
image-20220123234256425
image-20220123234256425

各大类型总结


类型

关键字

占用字节

适用场景

取值范围

字节类型

byte

1

适用取值范围很小的数

-128 ~127

短整形

short

2

较小的整数

-2^15^ ~ 2^15^-1

整形

int

4

一般整数

-2^31^ ~ 2^31^-1

长整型

long

8

非常大的整数

-2^63^ ~ 2^63^-1

浮点型

float

4

普通实数

-3.402 823*10^38^ ~ 3.402 823*10^38^

双精度

double

8

非常大的实数

-1.7977*10^308^ ~ 1.7977*10^308^

字符型

char

2

单个字符

0-65535

布尔类型

boolean

1(具体取决于虚拟机实现)

只有真或假取值

true和false

基础数据类型转换


  通过上文可以了解到,表达同一种含义的可以用多种类型表示(如整数类型有:byte、short、int、long),区别在于它们占用的空间以及可以表示的范围不一样。在JAVA中,一种数据类型变成另外一种数据类型被称之为转换,转换过程中也会涉及到数据转换。

  常见的基础数据类型精度由低到高可以排序为:byte、short、char、int、long、float、double。当我们将低精度的数据类型赋值给高精度的数据类型时,系统会自动完成数据类型的转换(类比思想:将小容量的物体存放到大容量的容器中,当然是没有问题的),如:

image-20220124080730407
image-20220124080730407

  但如果需要将高精度的类型转换成低精度的类型,那么就会出现精度的丢失,所以必须显示指定类型转换,格式如下:(需要转换的类型)要转换的值

image-20220123235724510
image-20220123235724510

小结


  本篇文章通过类比的方式介绍了JAVA中自带的8大基础数据类型的特点和使用场景,这8大基础类型将伴随着我们整个编程生涯,因此,了解和记住它们的特点对今后的编程也至关重要。下一篇我们将介绍如何通过这8大基础数据类型进行相应的算术运算,设计实现一个简单的计算器案例。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逻辑类型
    • boolean
    • 整数类型
      • byte类型
        • short类型
          • int类型
            • long类型
            • 字符类型
              • char类型
              • 浮点类型
                • float类型
                  • double类型
                  • 各大类型总结
                  • 基础数据类型转换
                  • 小结
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档