一文详解java的数据类型
1. 题记
Java是一门对数据类型敏感的语言,本博文主要总结介绍java语言的数据类型。
2. java的数据类型
Java 的数据类型分为基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。
2.1 基本数据类型
2.1.1 整数类型(Integral Types)
- byte:
字节长度:1 字节(8 位)。
取值范围:-128(-2⁷)到 127(2⁷ - 1)。通常用于节省存储空间,在处理文件流或者网络传输中的小整数时很有用。例如,在读取一个字节的数据时,可以将其存储到 byte 类型的变量中。 - short:
字节长度:2 字节(16 位)。
取值范围:-32768(-2¹⁵)到 32767(2¹⁵ - 1)。在某些特定的情况下,如果知道一个整数不需要太大的范围,并且希望比 int 类型占用更少的空间,可以使用 short。不过在现代计算机中,由于内存相对充裕,short 的使用场景相对较少。 - int:
字节长度:4 字节(32 位)。
取值范围:-2147483648(-2³¹)到 2147483647(2³¹ - 1)。它是最常用的整数类型,用于存储一般的整数值,如循环计数、数组索引等。例如,for (int i = 0; i < 10; i++)中的i就是 int 类型。 - long:
字节长度:8 字节(64 位)。
取值范围:-9223372036854775808(-2⁶³)到 9223372036854775807(2⁶³ - 1)。当需要存储非常大的整数,如时间戳(以毫秒为单位从 1970 年 1 月 1 日 00:00:00 UTC 开始计算),通常使用 long 类型。
2.1.2 浮点类型(Floating - Point Types)
- float:
字节长度:4 字节(32 位)。
遵循 IEEE 754 标准,在内存中的存储格式分为符号位、指数位和尾数位。它的精度有限,大约有 7 位有效数字。在定义 float 类型的变量时,需要在数字后面加上f或F后缀。例如,float num = 3.14f。它通常用于对精度要求不是极高的科学计算或者图形处理中的坐标等情况。 - double:
字节长度:8 字节(64 位)。
同样遵循 IEEE 754 标准,大约有 15 - 16 位有效数字,精度比 float 高。在 Java 中,如果不写后缀,默认的浮点数类型是 double。例如,double num2 = 3.1415926。在大多数的数学计算和需要高精度的场景下,如金融计算等,都会使用 double 类型。
2.1.3 字符类型(Character Type)
- char:
字节长度:2 字节(16 位)。
它用于存储单个字符,字符采用 Unicode 编码。Unicode 编码可以表示世界上几乎所有的字符。例如,char ch = ‘C’;可以存储一个英文字母,也可以存储汉字等其他字符,如char ch2 = ‘中’;。它的取值范围是从\u0000到\uffff,可以通过字符的 Unicode 编码来进行操作。
2.1.4 布尔类型(Boolean Type)
- 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
- 文件处理和网络通信:在处理字节流时非常有用。例如,当从文件中读取字节数据或者通过网络接收字节数据时,这些数据可以直接存储到byte类型的数组中。在比如,在读取一个图像文件的字节内容或者处理网络协议中的字节码数据时,byte类型是基础的数据存储单元。
- 节省内存空间的小整数存储:如果明确知道一个整数的范围很小,如存储一些状态标志(-128 到 127 之间),使用byte可以有效地节省内存空间。例如,在一个简单的游戏中,存储角色的方向(上、下、左、右可以用 - 1、0、1 等小整数表示),byte类型就足够了。
3.1.2 short
- 特定的数值范围场景:当处理的数据范围已知且在-32768到32767之间,并且内存空间比较宝贵时可以考虑使用。例如,在一些嵌入式系统或者对内存使用要求苛刻的设备中,存储传感器采集到的小范围整数数据(如温度传感器返回的值在一定范围内)。不过,在一般的应用开发中,由于内存资源相对充足,short的使用相对较少。
3.1.3 int
- 通用的整数计数和索引:int是java最常用的整数类型。用于循环计数,比如在for循环中for(int i = 0; i < n; i++),i作为循环变量,n通常也是int类型。同时,在数组索引时,因为数组的长度通常是整数,而且在合理范围内,所以使用int来访问数组元素的索引,如int[] array = new int[10]; int element = array[3];
- 一般的数学运算和逻辑判断中的整数:在进行简单的数学运算(如加法、减法、乘法、除法)和逻辑判断(如比较两个整数的大小)时,int类型可以很好地满足需求。例如,计算一个班级学生的人数总和,或者判断一个学生的成绩是否大于及格线(成绩通常用int表示)。
3.1.4 long
- 大数据处理和时间戳相关:当需要处理非常大的整数时,如数据库中的大型编号(可能超出int的范围)或者时间相关的数据。例如,在处理时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 开始到现在的毫秒数),由于这个数字非常大,需要使用long类型来准确存储和计算。在处理大文件的字节数(文件大小可能超过int所能表示的范围)等情况时也会用到。
3.1.5 float
- 对精度要求不高的科学计算和图形处理:在一些科学计算场景中,当精度要求不是极高时可以使用。例如,在简单的物理模拟中,计算物体的速度、加速度等,这些数值可能不需要很高的精度。在图形处理中,存储和处理屏幕坐标(特别是在对精度要求不高的 2D 图形应用中)或者简单的图形变换参数(如缩放因子等)时,float可以满足需求。
3.1.6 double
- 高精度的数学计算和金融领域:在大多数的数学计算场景下,如复杂的数值分析、统计计算等,double类型提供了足够的精度来确保计算结果的准确性。在金融领域,计算货币金额、利率、投资回报率等,由于涉及到高精度的数值计算,double是常用的数据类型。例如,计算银行账户的利息,或者股票的收益率等。
3.1.7 char
- 单个字符处理和文本显示基础单元:用于存储和处理单个字符,在文本处理的基础层面非常有用。例如,在读取和处理用户输入的单个字符(如命令行界面中的一个字符命令),或者在构建字符串时,逐个字符地进行处理。在图形用户界面(GUI)中,处理文本标签中的单个字符显示属性(如字体、颜色等针对单个字符的设置)也会涉及到char类型。
3.1.8 boolean
- 逻辑判断和控制流程:用于表示条件的真假,是控制程序流程的关键数据类型。在if - else语句、while循环和for循环(结合条件判断)等结构中,boolean类型的变量或者表达式决定了程序的执行路径。例如,判断一个用户是否登录成功(boolean isLoggedIn),根据这个值来决定是否显示用户特定的页面或者执行用户相关的操作。
3.2 引用数据类型的使用场景
3.2.1类
- 面向对象编程的核心数据结构:用于构建复杂的对象模型。在企业级应用开发中,如构建用户管理系统,会创建User类来存储用户的各种信息(姓名、密码、权限等)和行为(登录、注销等)。在游戏开发中,定义游戏角色类,包含角色的属性(生命值、攻击力等)和方法(移动、攻击等)。通过类可以将数据和操作数据的方法封装在一起,提高代码的可读性和可维护性。
- 实现继承和多态:通过继承,可以创建具有层次关系的类。例如,在图形绘制系统中,有一个基类Shape,然后派生出Circle、Rectangle等具体形状的类。多态性允许在程序运行时根据对象的实际类型来调用相应的方法,这在设计灵活的软件架构时非常重要,比如在一个绘图程序中,可以通过一个统一的draw(Shape shape)方法来绘制不同类型的形状。
3.2.2 接口
- 定义标准和契约:在大型项目中,用于定义一组标准的行为。例如,在开发一个插件系统时,主程序可以定义一个接口,插件开发者需要实现这个接口来确保插件能够正确地集成到主程序中。在 Java 的集合框架中,List、Set、Map等接口定义了对数据集合的操作标准,不同的实现类(如ArrayList、LinkedList、HashSet等)按照这些接口的定义提供具体的实现,这样可以方便地在不同的实现之间进行替换,提高代码的灵活性和可扩展性。
3.2.3 数组
存储同类型的批量数据:在数据存储和处理场景中非常常见。例如,存储学生成绩列表,int[] scores = new int[30];可以方便地存储 30 个学生的成绩。在图像处理中,存储图像的像素数据(如int[] pixels,每个元素可能代表一个像素的颜色值)。数组提供了一种简单而高效的方式来访问和处理批量的数据,通过索引可以快速地定位和操作元素。
3.2.4 枚举
定义常量集合:在需要限制变量取值范围的情况下使用。例如,在表示一周的星期几、一年的四季等固定的取值集合时,枚举非常合适。在状态机编程中,枚举可以用于定义状态的集合,如网络连接状态(未连接、连接中、已连接等),通过使用枚举可以使代码更加清晰,避免使用魔法数字或字符串来表示状态,提高代码的可读性和可维护性。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。
相关文章:
一文详解java的数据类型
1. 题记 Java是一门对数据类型敏感的语言,本博文主要总结介绍java语言的数据类型。 2. java的数据类型 Java 的数据类型分为基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 2.1 基本数…...

Flink API 的层次结构
Apache Flink 提供了多层 API,每层 API 针对不同的抽象层次和用途,使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明:...
lua入门教程:math
在Lua中,math库是一个非常重要的内置库,它提供了许多用于数学计算的函数。这些函数可以处理各种数学运算,包括基本的算术运算、三角函数、对数函数、随机数生成等。结合你之前提到的Lua中的数字遵循IEEE 754双精度浮点标准,我们可…...

ROS2简介与Ubuntu24.04中安装指南
之前安装了一个版本,但是不愿意写blog,现在想想自己就是个沙子立个flag,每次配置项目,写流程blog ROS简介 ROS(Robot Operating System)是一个开源的机器人软件平台,提供了许多工具和库来帮助…...

命令行工具PowerShell使用体验
命令行工具PowerShell使用 PowerShell是微软开发的一种面向对象的命令行Shell和脚本语言环境,它允许用户通过命令行的方式管理操作系统。相较于传统CMD,PowerShell增加了面向对象的程序设计框架,拥有更强大的功能和扩展性。使用PowerShell可…...
MongoDB 详解:深入理解与探索
在当今的数据库领域,MongoDB 以其独特的特性和强大的功能,成为了众多开发者和企业的首选。本文将对 MongoDB 进行详细的介绍,包括其特点、应用场景、流程图以及源码分析。 一、MongoDB 概述 MongoDB 是一个基于分布式文件存储的开源数据库系…...

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

sealos部署K8s,安装docker时master节点突然NotReady
1、集群正常运行中,在集群master-1上安装了dockerharbor,却发现master-1节点NotReady,使用的网络插件为 Cilium #安装docker和harbor(docker运行正常) rootmaster-1:/etc/apt# apt install docker-ce5:19.03.15~3-0~u…...

使用vite+react+ts+Ant Design开发后台管理项目(五)
前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…...
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专业版,下面将以此为基础来讲解如何创建SpringBoot项目。 点击New Project 选择依赖 注意,在选择SpringBoot版本时,不要选择带SNAPSHOT的版本。 这样&#…...

IT架构管理
目录 总则 IT架构管理目的 明确组织与职责 IT架构管理旨在桥接技术实施与业务需求之间的鸿沟,通过深入理解业务战略和技术能力,推动技术创新以支持业务增长,实现技术投资的最大价值。 设定目标与范围 IT架构管理的首要目的是确立清晰的组织…...
Feign入门实践
引言 随着微服务架构的兴起,服务间的通信变得越来越频繁和复杂。为了简化服务之间的调用过程,提高开发效率和系统的可维护性,Spring Cloud 生态系统提供了多种解决方案,其中 OpenFeign 是一种声明式的 HTTP 客户端,它使…...

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

书生大模型实战营-玩转HF/魔搭社区闯关任务
通过Github Codespace下载InternLM模型并运行 本篇博客是记录《书生大模型实战营第四期-玩转HF/魔搭/魔乐》章节的闯关任务从HF上下载模型文件,对实战营感兴趣的小伙伴也可以扫码报名哦。 一、通过模版创建Codespace环境 访问codespace 点击Jupyter Notebook 模版…...
混响(Reverb):原理、应用与发展趋势的深度解析
目录 引言1. 混响的基本原理2. 混响的应用3. 混响的技术实现4. 混响的未来发展趋势5. 总结 引言 混响(Reverb)是音频信号处理中的重要概念之一,在自然界和音频工程中都扮演着关键角色。从音乐制作到语音识别,从电影音效到虚拟现实…...
Java学习教程,从入门到精通,Java修饰符语法知识点及案例代码(23)
1.Java修饰符语法知识点及案例代码 Java修饰符用于改变类、方法、变量、接口等元素的行为和可见性。主要分为两大类:访问修饰符和非访问修饰符。 访问修饰符(Access Modifiers) public 提供最大的访问权限,任何类都可以访问。使…...
钉钉小程序使用getApp实现类型provide inject的功能 应用场景:解决页面同步子组件弹窗的滚动问题
前言:在开发钉钉小程序的时候 组件内部的弹窗滚动会带着视图同步滚动 所以需要在组件内部弹窗显示的时候禁用视图的scroll滚动 由于我组件封装的比较深 不可能逐级传递 dd也么有provide的语法 所以我使用的getApp 完成控制的效果 最终完美运行 觉得有帮助相互关注一下 后续会持…...
标准化 Git 提交信息的约定
在使用 Git 进行版本控制时,良好的提交信息可以帮助团队成员更好地理解每次提交的目的和影响。为了规范化提交信息,一些团队采用了特定的格式或约定,比如 Angular 团队提出的 Commit Message Conventions。这种规范有助于自动化工具的使用&am…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...