一文详解java的数据类型

news2024/11/13 12:16:07

1. 题记

Java是一门对数据类型敏感的语言,本博文主要总结介绍java语言的数据类型。

2. java的数据类型

Java 的数据类型分为基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。

2.1 基本数据类型

2.1.1 整数类型(Integral Types)
  1. byte:
    字节长度:1 字节(8 位)。
    取值范围:-128(-2⁷)到 127(2⁷ - 1)。通常用于节省存储空间,在处理文件流或者网络传输中的小整数时很有用。例如,在读取一个字节的数据时,可以将其存储到 byte 类型的变量中。
  2. short:
    字节长度:2 字节(16 位)。
    取值范围:-32768(-2¹⁵)到 32767(2¹⁵ - 1)。在某些特定的情况下,如果知道一个整数不需要太大的范围,并且希望比 int 类型占用更少的空间,可以使用 short。不过在现代计算机中,由于内存相对充裕,short 的使用场景相对较少。
  3. int:
    字节长度:4 字节(32 位)。
    取值范围:-2147483648(-2³¹)到 2147483647(2³¹ - 1)。它是最常用的整数类型,用于存储一般的整数值,如循环计数、数组索引等。例如,for (int i = 0; i < 10; i++)中的i就是 int 类型。
  4. long:
    字节长度:8 字节(64 位)。
    取值范围:-9223372036854775808(-2⁶³)到 9223372036854775807(2⁶³ - 1)。当需要存储非常大的整数,如时间戳(以毫秒为单位从 1970 年 1 月 1 日 00:00:00 UTC 开始计算),通常使用 long 类型。
2.1.2 浮点类型(Floating - Point Types)
  1. float:
    字节长度:4 字节(32 位)。
    遵循 IEEE 754 标准,在内存中的存储格式分为符号位、指数位和尾数位。它的精度有限,大约有 7 位有效数字。在定义 float 类型的变量时,需要在数字后面加上f或F后缀。例如,float num = 3.14f。它通常用于对精度要求不是极高的科学计算或者图形处理中的坐标等情况。
  2. double:
    字节长度:8 字节(64 位)。
    同样遵循 IEEE 754 标准,大约有 15 - 16 位有效数字,精度比 float 高。在 Java 中,如果不写后缀,默认的浮点数类型是 double。例如,double num2 = 3.1415926。在大多数的数学计算和需要高精度的场景下,如金融计算等,都会使用 double 类型。
2.1.3 字符类型(Character Type)
  1. char:
    字节长度:2 字节(16 位)。
    它用于存储单个字符,字符采用 Unicode 编码。Unicode 编码可以表示世界上几乎所有的字符。例如,char ch = ‘C’;可以存储一个英文字母,也可以存储汉字等其他字符,如char ch2 = ‘中’;。它的取值范围是从\u0000到\uffff,可以通过字符的 Unicode 编码来进行操作。
2.1.4 布尔类型(Boolean Type)
  1. boolean:
    字节长度:理论上只需要 1 位,但在 Java 虚拟机规范中,它的大小没有明确规定,一般占用 1 字节。
    它只有两个取值,true和false,用于表示逻辑条件。例如,在判断一个数是否大于另一个数时,可以使用boolean result = a > b;,然后根据result的值来进行后续的操作。

2.2 引用数据类型

2.2.1 类(Class)

类是一种自定义的数据类型,用于封装数据和方法。例如,定义一个简单的Person类:

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

可以通过new关键字创建类的实例,如Person p = new Person(“jack ma”, 30);。p就是Person类的一个引用,通过这个引用可以访问Person类中的方法和属性。

2.2.2 接口(Interface)

接口定义了一组方法签名,但没有方法体。它用于规定实现类必须实现的方法。例如:

interface Shape {
    double getArea();
}

类实现接口时,必须实现接口中定义的所有方法。接口可以用于实现多态等面向对象的设计模式,使得代码更加灵活和可维护。

2.2.3 数组(Array)

数组是一种存储相同类型数据的容器。例如,定义一个整数数组:int[] numbers = new int[5];,这个数组可以存储 5 个 int 类型的元素。数组的长度是固定的,一旦创建就不能改变。可以通过索引来访问数组中的元素,如numbers[0]表示数组中的第一个元素。

2.2.4 枚举(Enum)

枚举是一种特殊的数据类型,用于定义一组常量。例如:

enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

枚举类型的变量只能取枚举中定义的值,这样可以增强代码的可读性和安全性,避免使用一些非法的常量值。例如,Weekday today = Weekday.MONDAY;。

3. Java不同数据类型的数据的使用场景

3.1 基本数据类型的使用场景

3.1.1 byte
  1. 文件处理和网络通信:在处理字节流时非常有用。例如,当从文件中读取字节数据或者通过网络接收字节数据时,这些数据可以直接存储到byte类型的数组中。在比如,在读取一个图像文件的字节内容或者处理网络协议中的字节码数据时,byte类型是基础的数据存储单元。
  2. 节省内存空间的小整数存储:如果明确知道一个整数的范围很小,如存储一些状态标志(-128 到 127 之间),使用byte可以有效地节省内存空间。例如,在一个简单的游戏中,存储角色的方向(上、下、左、右可以用 - 1、0、1 等小整数表示),byte类型就足够了。
3.1.2 short
  1. 特定的数值范围场景:当处理的数据范围已知且在-32768到32767之间,并且内存空间比较宝贵时可以考虑使用。例如,在一些嵌入式系统或者对内存使用要求苛刻的设备中,存储传感器采集到的小范围整数数据(如温度传感器返回的值在一定范围内)。不过,在一般的应用开发中,由于内存资源相对充足,short的使用相对较少。
3.1.3 int
  1. 通用的整数计数和索引:int是java最常用的整数类型。用于循环计数,比如在for循环中for(int i = 0; i < n; i++),i作为循环变量,n通常也是int类型。同时,在数组索引时,因为数组的长度通常是整数,而且在合理范围内,所以使用int来访问数组元素的索引,如int[] array = new int[10]; int element = array[3];
  2. 一般的数学运算和逻辑判断中的整数:在进行简单的数学运算(如加法、减法、乘法、除法)和逻辑判断(如比较两个整数的大小)时,int类型可以很好地满足需求。例如,计算一个班级学生的人数总和,或者判断一个学生的成绩是否大于及格线(成绩通常用int表示)。
3.1.4 long
  1. 大数据处理和时间戳相关:当需要处理非常大的整数时,如数据库中的大型编号(可能超出int的范围)或者时间相关的数据。例如,在处理时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 开始到现在的毫秒数),由于这个数字非常大,需要使用long类型来准确存储和计算。在处理大文件的字节数(文件大小可能超过int所能表示的范围)等情况时也会用到。
3.1.5 float
  1. 对精度要求不高的科学计算和图形处理:在一些科学计算场景中,当精度要求不是极高时可以使用。例如,在简单的物理模拟中,计算物体的速度、加速度等,这些数值可能不需要很高的精度。在图形处理中,存储和处理屏幕坐标(特别是在对精度要求不高的 2D 图形应用中)或者简单的图形变换参数(如缩放因子等)时,float可以满足需求。
3.1.6 double
  1. 高精度的数学计算和金融领域:在大多数的数学计算场景下,如复杂的数值分析、统计计算等,double类型提供了足够的精度来确保计算结果的准确性。在金融领域,计算货币金额、利率、投资回报率等,由于涉及到高精度的数值计算,double是常用的数据类型。例如,计算银行账户的利息,或者股票的收益率等。
3.1.7 char
  1. 单个字符处理和文本显示基础单元:用于存储和处理单个字符,在文本处理的基础层面非常有用。例如,在读取和处理用户输入的单个字符(如命令行界面中的一个字符命令),或者在构建字符串时,逐个字符地进行处理。在图形用户界面(GUI)中,处理文本标签中的单个字符显示属性(如字体、颜色等针对单个字符的设置)也会涉及到char类型。
3.1.8 boolean
  1. 逻辑判断和控制流程:用于表示条件的真假,是控制程序流程的关键数据类型。在if - else语句、while循环和for循环(结合条件判断)等结构中,boolean类型的变量或者表达式决定了程序的执行路径。例如,判断一个用户是否登录成功(boolean isLoggedIn),根据这个值来决定是否显示用户特定的页面或者执行用户相关的操作。

3.2 引用数据类型的使用场景

3.2.1类
  1. 面向对象编程的核心数据结构:用于构建复杂的对象模型。在企业级应用开发中,如构建用户管理系统,会创建User类来存储用户的各种信息(姓名、密码、权限等)和行为(登录、注销等)。在游戏开发中,定义游戏角色类,包含角色的属性(生命值、攻击力等)和方法(移动、攻击等)。通过类可以将数据和操作数据的方法封装在一起,提高代码的可读性和可维护性。
  2. 实现继承和多态:通过继承,可以创建具有层次关系的类。例如,在图形绘制系统中,有一个基类Shape,然后派生出Circle、Rectangle等具体形状的类。多态性允许在程序运行时根据对象的实际类型来调用相应的方法,这在设计灵活的软件架构时非常重要,比如在一个绘图程序中,可以通过一个统一的draw(Shape shape)方法来绘制不同类型的形状。
3.2.2 接口
  1. 定义标准和契约:在大型项目中,用于定义一组标准的行为。例如,在开发一个插件系统时,主程序可以定义一个接口,插件开发者需要实现这个接口来确保插件能够正确地集成到主程序中。在 Java 的集合框架中,List、Set、Map等接口定义了对数据集合的操作标准,不同的实现类(如ArrayList、LinkedList、HashSet等)按照这些接口的定义提供具体的实现,这样可以方便地在不同的实现之间进行替换,提高代码的灵活性和可扩展性。
3.2.3 数组

存储同类型的批量数据:在数据存储和处理场景中非常常见。例如,存储学生成绩列表,int[] scores = new int[30];可以方便地存储 30 个学生的成绩。在图像处理中,存储图像的像素数据(如int[] pixels,每个元素可能代表一个像素的颜色值)。数组提供了一种简单而高效的方式来访问和处理批量的数据,通过索引可以快速地定位和操作元素。

3.2.4 枚举

定义常量集合:在需要限制变量取值范围的情况下使用。例如,在表示一周的星期几、一年的四季等固定的取值集合时,枚举非常合适。在状态机编程中,枚举可以用于定义状态的集合,如网络连接状态(未连接、连接中、已连接等),通过使用枚举可以使代码更加清晰,避免使用魔法数字或字符串来表示状态,提高代码的可读性和可维护性。

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送

在C#中&#xff0c;SendMessage方法是一个强大的工具&#xff0c;它允许我们与Windows API交互&#xff0c;模拟键盘和鼠标事件。本文将详细介绍如何使用SendMessage方法来发送鼠标和键盘消息。 1. SendMessage方法概述 SendMessage是Windows API中的一个函数&#xff0c;它用…

CSS教程(三)- CSS 三大特性

1. 层叠性 介绍 多组CSS样式共同作用于一个元素&#xff0c;就会出现 覆盖&#xff08;层叠&#xff09; 另一个冲突的样式。 层叠原则 样式冲突&#xff1a;遵循就近原则&#xff08;哪个样式离结构近&#xff0c;就执行哪个样式&#xff09; 样式不冲突&#xff0c;就不会重…

CyclicBarrier使用详解及遇到的坑

上一篇文章讲的是关于是使用CountDownLatch实现生成年底报告遇到的问题&#xff0c;这个计数器和CyclicBarrier也有类似功能&#xff0c;但是应用场景不同。 一、应用场景 CountDownLatch&#xff1a; 有ABCD四个任务&#xff0c;ABC是并行执行,等ABC三个任务都执行完…

Java-I/O框架14:Properties集合及使用

视频链接&#xff1a;16.32 Properties使用&#xff08;2&#xff09;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.player.switch&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p32 1.Properties集合 特性&#xff1a; 存储…

Windows下mysql数据库备份策略

Windows下mysql的增量备份和全量备份&#xff0c;并利用schtasks设置定时任务执行bat脚本。 一、备份要求 序号 备份类型 备份频次 备份时间 1 增量备份 每周一-每周六各一次 18:00:00 2 全量备份 每周日一次 18:00:00 二、备份方法 2.1增量备份 2.1.1准备工作…

架构师备考-概念背诵(软件工程)

软件工程 软件开发生命周期: 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。软件运行和维护:就是…

【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销

一、Linux 概述 1. 应用领域 服务器领域 linux在服务器领域是最强的&#xff0c;因为它免费、开源、稳定。 嵌入式领域 它的内核最小可以达到几百KB, 可根据需求对软件剪裁&#xff0c;近些年在嵌入式领域得到了很大的应用。 主要应用&#xff1a;机顶盒、数字电视、网络…

【Java项目】基于SpringBoot的【生鲜交易系统】

技术简介&#xff1a; 系统软件架构选择B/S模式、java技术和MySQL数据库等&#xff0c;总体功能模块运用自顶向下的分层思想。 系统简介&#xff1a; 考虑到实际生活中在生鲜交易方面的需要以及对该系统认真的分析,将系统权限按管理员&#xff0c;用户这两类涉及用户划分。 (…

AI Weekly『11月4-10日』: Anthropic发布Claude 3.5 Haiku,腾讯开源混元-Large模型!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

贪心算法day3(最长递增序列问题)

目录 1.最长递增三元子序列 2.最长连续递增序列 1.最长递增三元子序列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;我们只需要设置两个数进行比较就好。设a为nums[0]&#xff0c;b 为一个无穷大的数&#xff0c;只要有比a小的数字就赋值…

vue实现图片无限滚动播放

本人vue新手菜鸡&#xff0c;文章为自己在项目中遇到问题的记录&#xff0c;如有不足还请大佬指正 文章目录 实现效果代码展示总结 因为刚接触vue&#xff0c;本想着看看能不能用一些element的组件实现图片的轮播效果&#xff0c;尝试使用过element-UI里的走马灯Carouse&#x…

[ 内网渗透实战篇-2 ] 父域子域架构的搭建与安装域环境判断域控定位组策略域森林架构配置信任关系

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Follow软件的使用入门教程

开篇 看到很多兄弟还不知道怎么用这个当下爆火的浏览器&#xff01;在这里简单给需要入门的小伙伴一些建议&#xff1a; 介绍 简单解释一下&#xff0c;RSS 意思是简易信息聚合&#xff0c;用户可以通过 RSS 阅读器或聚合工具自主订阅并浏览各个平台的内容源&#xff0c;不用…

esp32学习:用虫洞ESP32开发板,快速实现无线图传

我们的虫洞ESP32-S3-EYE开发板&#xff0c;能够完美运行esp who AI代码&#xff0c;所以实现无线图传那是非常容易的&#xff0c;我们先看看esp who代码库中examples目录&#xff1a; 里面有比较多的web例程&#xff0c;在这些例程下&#xff0c;稍作修改&#xff0c;就可以快速…

最新三维视觉下的扩散模型综述——Diffusion Models in 3D Vision: A Survey

目录 摘要 一、引言 二、扩散模型简介 A.扩散模型的介绍 B.扩散模型的数学基础 C.扩散模型的变体 D.三维视觉中的生成过程 三、三维视觉基础 A.三维表示 B.三维视觉中的深度学习方法 C.3D视觉中的挑战 四、三维扩散生成任务 A.无条件生成 B.图像到三维 C.文本到…

JavaSE:运算符 (学习笔记)

目录 一&#xff0c;算术运算符 【1】 共同点&#xff1a; 【2】 不同点&#xff1a; 二&#xff0c;关系运算符 三&#xff0c;逻辑运算符 2&#xff0c;&和&&的区别和联系 { |和||的区别和联系 }---两题类似 四&#xff0c;赋值运算符 五&#xff0c;拓展…

strtok函数详解

strtok函数 strtok 函数是一个字符串分割函数&#xff0c;用于将字符串分割成一系列的标记。这个函数通过一组分隔符字符来确定标记的边界&#xff0c;每次调用都会返回字符串中的下一个标记&#xff0c;并且将原始字符串中的分隔符替换为空字符‘\0’&#xff0c;从而实际上是…

题目练习之二叉树那些事儿(续集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

【入门篇】确定字符串是否包含唯一字符——多语言版本

题目跳转&#xff1a;确定字符串是否包含唯一字符 题目解析 这个问题要求我们判断一个字符串中的字符是否唯一&#xff08;忽略字母的大小写&#xff09;&#xff0c;并输出相应的结果。如果字符串中所有的字符都是唯一的&#xff0c;输出 YES&#xff1b;否则&#xff0c;输…

ConcurrentModificationException:检测到并发修改完美解决方法

&#x1f6a6; ConcurrentModificationException&#xff1a;检测到并发修改完美解决方法 &#x1f4a1; &#x1f6a6; ConcurrentModificationException&#xff1a;检测到并发修改完美解决方法 &#x1f4a1;摘要1. 什么是ConcurrentModificationException&#xff1f;&…