当前位置: 首页 > news >正文

一文详解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 枚举

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

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

相关文章:

一文详解java的数据类型

1. 题记 Java是一门对数据类型敏感的语言&#xff0c;本博文主要总结介绍java语言的数据类型。 2. java的数据类型 Java 的数据类型分为基本数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。 2.1 基本数…...

Flink API 的层次结构

Apache Flink 提供了多层 API&#xff0c;每层 API 针对不同的抽象层次和用途&#xff0c;使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明&#xff1a;...

lua入门教程:math

在Lua中&#xff0c;math库是一个非常重要的内置库&#xff0c;它提供了许多用于数学计算的函数。这些函数可以处理各种数学运算&#xff0c;包括基本的算术运算、三角函数、对数函数、随机数生成等。结合你之前提到的Lua中的数字遵循IEEE 754双精度浮点标准&#xff0c;我们可…...

ROS2简介与Ubuntu24.04中安装指南

之前安装了一个版本&#xff0c;但是不愿意写blog&#xff0c;现在想想自己就是个沙子立个flag&#xff0c;每次配置项目&#xff0c;写流程blog ROS简介 ROS&#xff08;Robot Operating System&#xff09;是一个开源的机器人软件平台&#xff0c;提供了许多工具和库来帮助…...

命令行工具PowerShell使用体验

命令行工具PowerShell使用 PowerShell是微软开发的一种面向对象的命令行Shell和脚本语言环境&#xff0c;它允许用户通过命令行的方式管理操作系统。相较于传统CMD&#xff0c;PowerShell增加了面向对象的程序设计框架&#xff0c;拥有更强大的功能和扩展性。使用PowerShell可…...

MongoDB 详解:深入理解与探索

在当今的数据库领域&#xff0c;MongoDB 以其独特的特性和强大的功能&#xff0c;成为了众多开发者和企业的首选。本文将对 MongoDB 进行详细的介绍&#xff0c;包括其特点、应用场景、流程图以及源码分析。 一、MongoDB 概述 MongoDB 是一个基于分布式文件存储的开源数据库系…...

使用 Elasticsearch 构建食谱搜索(一)

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 Elasticsearch 构建基于语义搜索的食谱搜索。 简介 许多电子商务网站都希望增强其食谱搜索体验。正确使用语义搜索可以让客户根据更自然的查询&#xff08;例如 “something for Valentines Day - 情人节的礼物” 或 “…...

sealos部署K8s,安装docker时master节点突然NotReady

1、集群正常运行中&#xff0c;在集群master-1上安装了dockerharbor&#xff0c;却发现master-1节点NotReady&#xff0c;使用的网络插件为 Cilium #安装docker和harbor&#xff08;docker运行正常&#xff09; rootmaster-1:/etc/apt# apt install docker-ce5:19.03.15~3-0~u…...

使用vite+react+ts+Ant Design开发后台管理项目(五)

前言 本文将引导开发者从零基础开始&#xff0c;运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈&#xff0c;构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导&#xff0c;文章旨在为开发者揭示如何利用这些技术…...

Spring Boot实现多数据源连接和切换

文章目录 前言一、多数据源配置与切换方案二、实现步骤1. 创建多个 DataSource 配置类2. 创建 DataSource 配置类3. 创建动态数据源路由类4. 实现 DynamicDataSource 类5. 创建 DataSourceContextHolder 来存储当前的数据源标识6. AOP 方式切换数据源7. 自定义注解来指定数据源…...

发布 VectorTraits v3.0(支持 X86架构的Avx512系列指令集,支持 Wasm架构及PackedSimd指令集等)

文章目录 支持 X86架构的Avx512系列指令集支持Avx512时的输出信息 支持 Wasm架构及PackedSimd指令集支持PackedSimd时的输出信息VectorTraits.Benchmarks.Wasm 使用说明 新增了向量方法支持 .NET 8.0 新增的向量方法提供交织与解交织的向量方法YGroup3Unzip的范例代码 提供重新…...

详解如何创建SpringBoot项目

目录 点击New Project 选择依赖 简单使用SpringBoot 前面已经讲解了如何获取IDEA专业版&#xff0c;下面将以此为基础来讲解如何创建SpringBoot项目。 点击New Project 选择依赖 注意&#xff0c;在选择SpringBoot版本时&#xff0c;不要选择带SNAPSHOT的版本。 这样&#…...

IT架构管理

目录 总则 IT架构管理目的 明确组织与职责 IT架构管理旨在桥接技术实施与业务需求之间的鸿沟&#xff0c;通过深入理解业务战略和技术能力&#xff0c;推动技术创新以支持业务增长&#xff0c;实现技术投资的最大价值。 设定目标与范围 IT架构管理的首要目的是确立清晰的组织…...

Feign入门实践

引言 随着微服务架构的兴起&#xff0c;服务间的通信变得越来越频繁和复杂。为了简化服务之间的调用过程&#xff0c;提高开发效率和系统的可维护性&#xff0c;Spring Cloud 生态系统提供了多种解决方案&#xff0c;其中 OpenFeign 是一种声明式的 HTTP 客户端&#xff0c;它使…...

Leetcode 买卖股票的最佳时机 Ⅱ

使用贪心算法来解决此问题&#xff0c;通过在价格上涨的每一天买入并在第二天卖出的方式&#xff0c;累计所有上涨的利润&#xff0c;以实现最大收益。关键点是从第二天开始遍历&#xff0c;并且只要当前比前一天价格高&#xff0c;我们就在前一天买入然后第二天卖出去。下面是…...

书生大模型实战营-玩转HF/魔搭社区闯关任务

通过Github Codespace下载InternLM模型并运行 本篇博客是记录《书生大模型实战营第四期-玩转HF/魔搭/魔乐》章节的闯关任务从HF上下载模型文件&#xff0c;对实战营感兴趣的小伙伴也可以扫码报名哦。 一、通过模版创建Codespace环境 访问codespace 点击Jupyter Notebook 模版…...

混响(Reverb):原理、应用与发展趋势的深度解析

目录 引言1. 混响的基本原理2. 混响的应用3. 混响的技术实现4. 混响的未来发展趋势5. 总结 引言 混响&#xff08;Reverb&#xff09;是音频信号处理中的重要概念之一&#xff0c;在自然界和音频工程中都扮演着关键角色。从音乐制作到语音识别&#xff0c;从电影音效到虚拟现实…...

Java学习教程,从入门到精通,Java修饰符语法知识点及案例代码(23)

1.Java修饰符语法知识点及案例代码 Java修饰符用于改变类、方法、变量、接口等元素的行为和可见性。主要分为两大类&#xff1a;访问修饰符和非访问修饰符。 访问修饰符&#xff08;Access Modifiers&#xff09; public 提供最大的访问权限&#xff0c;任何类都可以访问。使…...

钉钉小程序使用getApp实现类型provide inject的功能 应用场景:解决页面同步子组件弹窗的滚动问题

前言:在开发钉钉小程序的时候 组件内部的弹窗滚动会带着视图同步滚动 所以需要在组件内部弹窗显示的时候禁用视图的scroll滚动 由于我组件封装的比较深 不可能逐级传递 dd也么有provide的语法 所以我使用的getApp 完成控制的效果 最终完美运行 觉得有帮助相互关注一下 后续会持…...

标准化 Git 提交信息的约定

在使用 Git 进行版本控制时&#xff0c;良好的提交信息可以帮助团队成员更好地理解每次提交的目的和影响。为了规范化提交信息&#xff0c;一些团队采用了特定的格式或约定&#xff0c;比如 Angular 团队提出的 Commit Message Conventions。这种规范有助于自动化工具的使用&am…...

墨语灵犀开源模型生态:对接LangChain/RAG构建专属翻译知识库

墨语灵犀开源模型生态&#xff1a;对接LangChain/RAG构建专属翻译知识库 1. 引言&#xff1a;当古典美学遇见现代AI架构 在人工智能技术快速发展的今天&#xff0c;翻译工具已经从简单的词汇转换演变为理解文化语境和语义深度的智能系统。「墨语灵犀」作为基于腾讯混元大模型…...

搞懂 SAP Fiori 前端服务器授权模型:从看得见应用,到真正拿到数据

在很多 SAP 项目里,权限问题最容易制造一种很迷惑的现象:用户明明已经拿到了角色,却还是打不开应用;或者磁贴已经能看见了,点进去却报错;再或者应用能启动,却一条业务数据都读不出来。要把这类问题讲清楚,关键不在于死记事务码,而在于真正理解 SAP Fiori 的授权是如何…...

告别重复造轮子,用快马ai一键生成tomcat高效开发工具集与配置模板

今天想和大家分享一个提升Tomcat开发效率的小技巧。作为一个经常和Tomcat打交道的开发者&#xff0c;我发现每次新建项目都要重复写一些基础工具类&#xff0c;特别浪费时间。最近在InsCode(快马)平台上尝试用AI生成了一套可复用的工具集&#xff0c;效果很不错。 数据库连接池…...

MambaAD实战:5分钟搞定工业缺陷检测的SoTA模型部署(附代码)

MambaAD工业缺陷检测实战&#xff1a;从模型原理到产线部署全指南 引言&#xff1a;当状态空间模型遇见工业质检 在液晶面板生产线上&#xff0c;一个0.1mm的亮点缺陷可能导致整批产品报废&#xff1b;在汽车零部件铸造车间&#xff0c;细微的表面裂纹可能引发严重的安全隐患。…...

BY8X01-16P Arduino音频模块驱动库深度解析

1. 项目概述BY8X01-16P-Arduino 是一款专为 Arduino 生态设计的轻量级、高兼容性音频模块控制库&#xff0c;面向 BY8001-16P 与 BY8301-16P&#xff08;文档中偶见笔误为 BY83001-16P&#xff09;双芯片平台。该库并非简单封装串口指令&#xff0c;而是以嵌入式系统工程视角重…...

STM32L152RE 32MHz时钟配置库:超低功耗MCU高频稳定启动方案

1. 项目概述ST_L152_32MHZ是一个专为 STMicroelectronics Nucleo-L152RE 开发板设计的轻量级时钟配置库&#xff0c;其核心目标是将系统主频&#xff08;SYSCLK&#xff09;从出厂默认的 32 kHz LSE 或 16 MHz HSI 稳定提升至32 MHz&#xff0c;并确保所有关键外设时钟&#xf…...

5分钟搞懂3GPP NTN标准:从Release16到19的关键技术演进与实战应用

5分钟搞懂3GPP NTN标准&#xff1a;从Release16到19的关键技术演进与实战应用 当全球通信行业将目光投向低轨卫星星座与高空平台时&#xff0c;3GPP的NTN&#xff08;非地面网络&#xff09;标准正在重塑连接边界。本文将以工程师视角&#xff0c;带您穿透技术文档迷雾&#xf…...

Matlab实战:5步搞定微电网源储荷协调调度(附完整CPLEX调用代码)

Matlab实战&#xff1a;微电网源储荷协调调度的5个工程化技巧 微电网调度是新能源时代的核心技术难题之一。面对风光发电的波动性和负荷需求的多变性&#xff0c;如何实现源、储、荷三者的动态平衡&#xff0c;成为电力工程师们每天都要应对的挑战。不同于学术论文中复杂的理论…...

手把手教你用Python打造一个简易图片颜色替换工具(含Tkinter GUI界面)

用Python和Tkinter构建智能图片颜色替换工具&#xff1a;从零到一的完整开发指南 在数字图像处理领域&#xff0c;颜色替换是一个基础但极其实用的功能。想象一下&#xff0c;你有一张产品照片需要快速调整主色调&#xff0c;或者需要将证件照的背景色统一更换——传统方式可能…...

从零搭建SRS流媒体服务器:实现RTMP推拉流的实战部署指南

1. 为什么选择SRS搭建流媒体服务器&#xff1f; 最近几年直播和实时视频的需求爆发式增长&#xff0c;很多开发者都在寻找轻量高效的流媒体服务器方案。我测试过不少开源方案&#xff0c;最终发现SRS&#xff08;Simple Realtime Server&#xff09;是最适合个人和小团队自建的…...