一文详解java的数据类型

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.rhkb.cn/news/470422.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程

一、概述 【软件资源文件下载在文章最后】 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程 点餐软件以其实用的功能和简便的操作&#xff0c;为小型餐饮店提供了高效的点餐管理解决方案&#xff0c;提高了工作效率和服务质量 ‌点餐管理‌&#xff1a;支持电…

5G时代的关键元件:射频微波MLCCs市场前景广阔

根据QYResearch调研团队最新发布的《全球射频微波多层陶瓷电容器市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球射频微波多层陶瓷电容器市场规模将攀升至12.4亿美元&#xff0c;其未来几年内的年复合增长率&#xff08;CAGR&#xff09;预计为5.1%。 以下图…

ElasticSearch学习笔记一:简单使用

一、前言 该系列的文章用于记录本人从0学习ES的过程&#xff0c;首先会对基本的使用进行讲解。本文默认已经安装了ES单机版本&#xff08;当然后续也会有对应的笔记&#xff09;&#xff0c;且对ES已经有了相对的了解&#xff0c;闲话少叙&#xff0c;书开正文。 二、ES简介 …

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api

前提&#xff1a; 从前面的学习我们知道 AVFrame中是最原始的 视频数据&#xff0c;这一节开始我们需要将这个最原始的视频数据 压缩成 AVPacket数据&#xff0c; 我们前面&#xff0c;将YUV数据或者 RGBA 数据装进入了 AVFrame里面&#xff0c;并且在SDL中显示。 也就是说&…

ODOO学习笔记(8):模块化架构的优势

灵活性与可定制性 业务流程适配&#xff1a;企业的业务流程往往因行业、规模和管理方式等因素而各不相同。Odoo的模块化架构允许企业根据自身的具体业务流程&#xff0c;选择和组合不同的模块。例如&#xff0c;一家制造企业可以启用采购、库存、生产和销售模块&#xff0c;并通…

28.医院管理系统(基于springboot和vue)

目录 1.系统的受众说明 2. 相关技术和开发环境 2.1 相关技术 2.1.1 Java语言 2.1.2 HTML、CSS、JavaScript 2.1.3 Redis 2.1.4 MySQL 2.1.5 SSM框架 2.1.6 Vue.js 2.1.7 SpringBoot 2.2 开发环境 3. 系统分析 3.1 可行性分析 3.1.1 经济可行性 3.1.2 技术…

实时渲染技术如何助力3D虚拟展厅?

实时渲染技术以其强大的图形处理能力和即时反馈特性&#xff0c;在虚拟展厅的创建和体验中发挥着举足轻重的作用。视创云展3D虚拟展厅提供全方位的VR漫游体验&#xff0c;实时渲染技术确保场景细腻逼真&#xff0c;让访客仿佛置身其中&#xff0c;享受沉浸式的视听享受。以下是…

金价大跌,特朗普胜选或成导火索

黄金光芒不再&#xff0c;美元强势崛起 上周特朗普赢得美国总统选举后&#xff0c;金价出现了大幅下跌。这标志着市场情绪正在发生转变&#xff0c;投资者开始从避险资产转向风险资产。 为何金价会下跌&#xff1f; 美元走强&#xff1a; 特朗普的胜选提振了美元&#xff0c;…

springboot项目中,使用ProGuard 对代码进行混淆

springboot项目中&#xff0c;使用ProGuard 对代码进行混淆 使用maven作为构建工具 &#xff0c; 在build中添加如下内容 <build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</inclu…

[CKS] 关闭API凭据自动挂载

目前的所有题目为2024年10月后更新的最新题库&#xff0c;考试的k8s版本为1.31.1 BackGround 安全审计发现某个Deployment有不合规的服务账号令牌&#xff0c;这可能导致安全漏洞。 Task 首先&#xff0c;修改monitoring namespace中现有的stats-monitor-sa ServiceAccount&…

zabbix监控端界面时间与服务器时间不对应

1. 修改系统时间 # tzselect Please select a continent, ocean, "coord", or "TZ".1) Africa2) Americas3) Antarctica4) Asia5) Atlantic Ocean6) Australia7) Europe8) Indian Ocean9) Pacific Ocean 10) coord - I want to use geographical coordina…

Gsensor加速度传感器数据异常及概率性卡死

关注 点赞 收藏 不错过精彩内容 大家好&#xff0c;我是硬核王同学 今天给大家分享下&#xff0c;经过三个多月解决的Gsensor加速度传感器数据异常及概率性卡死的问题。 数据异常 故事的开始是来自一位客户的投诉&#xff0c;说机器放在桌面上不去动它&#xff0c;语音就会播…

【CSS】“flex: 1“有什么用?

flex 属性的组成 flex 属性是一个复合属性&#xff0c;包含以下三个子属性&#xff1a; flex-grow&#xff1a;决定元素在容器中剩余空间的分配比例。默认值为 0&#xff0c;表示元素不会扩展。当设置为正数时&#xff0c;元素会按照设定比例扩展。flex-shrink&#xff1a;决…

【STM32】基于SPI协议读写SD,详解!

文章目录 0 前言1 SD卡的种类和简介1.1 SD卡的种类1.2 SD卡的整体结构1.3 SD卡运行机制——指令和响应2 SD卡的通信总线2.1 SDIO2.2 SPI3 硬件连接4 代码实践【重点】4.1 HAL库移植4.2 标准库移植4.3 遇到的问题和解决方案5 扩展阅读0 前言 因为项目需要,使用stm32读写sd卡,这…

软件测试面试题(800道)【附带答案】持续更新...

&#xff08;2024版&#xff09;面经 详细笔记部分展示&#xff1a; 测试基础&#xff08;102页&#xff09; Linux基础&#xff08;38页&#xff09; MySQL&#xff08;63页&#xff09; web测试&#xff08;21页&#xff09; API测试&#xff08;46页&#xff09; APP测试&…

带你掌握springboot集成SpringSecurity安全框架

前言&#xff1a; Spring Security 是 Spring 家族中的一个框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。一般来说&#xff0c;系统的安全性包括用户认证&#xff08;Authentication&#xff09;和用户授权&#xff08;Authorization&#xff09;两个部分。 认证…

【2024最新】基于springboot+vue的闲一品交易平台lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

修改yolo格式的labels类别、删除yolo格式的labels类别

1、项目中&#xff0c;数据集的类别顺序有时会改变&#xff0c;例如a项目类别1是b项目的类别3&#xff0c;&#xff0c;需要用a项目的数据集&#xff0c;只需要改类别就行&#xff0c;就不需要重新标注了&#xff0c;例如a项目的classes是 b项目的classes是 a项目的数据可以用…

Java项目实战II基于微信小程序的个人行政复议在线预约系统微信小程序(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于微信小…

Kubernetes在容器编排中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Kubernetes在容器编排中的应用 Kubernetes在容器编排中的应用 Kubernetes在容器编排中的应用 引言 Kubernetes 概述 定义与原理 …