Java学习教程,从入门到精通,Java 基本数据类型详解(5)
Java 基本数据类型详解
Java是一种强类型语言,这意味着在Java程序中,每个变量都必须明确声明其数据类型。Java提供了八种基本数据类型(Primitive Data Types),这些类型都是预先定义好的,并且每种类型都占用固定大小的内存空间。以下是Java八种基本数据类型的详细介绍:
1. 整数类型(Integer Types)
-
byte:
- 大小:1字节(8位)
- 范围:-128到127
- 默认值:0
- 用途:通常用于表示小范围的整数,如文件操作中的字节计数等。
-
short:
- 大小:2字节(16位)
- 范围:-32,768到32,767
- 默认值:0
- 用途:用于表示中等范围的整数。
-
int:
- 大小:4字节(32位)
- 范围:-231到231-1(即-2,147,483,648到2,147,483,647)
- 默认值:0
- 用途:最常用的整数类型,用于表示大多数情况下的整数。
-
long:
- 大小:8字节(64位)
- 范围:-263到263-1
- 默认值:0L(注意L后缀,表示这是一个long类型的字面量)
- 用途:用于表示大范围的整数,如大文件的字节数等。
2. 浮点类型(Floating-Point Types)
-
float:
- 大小:4字节(32位)
- 范围:大约±3.40282347E+38F(6-7个有效十进制数字)
- 默认值:0.0f(注意f后缀,表示这是一个float类型的字面量)
- 用途:用于表示单精度浮点数,适用于对精度要求不高的场合。
-
double:
- 大小:8字节(64位)
- 范围:大约±1.79769313486231570E+308(15个有效十进制数字)
- 默认值:0.0d(虽然d后缀是可选的,但通常用于明确表示double类型)
- 用途:用于表示双精度浮点数,适用于对精度要求较高的场合。
浮点数和单精度浮点数定义如下:
浮点数
浮点数,属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体地说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。
浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。一个浮点数a由两个数m和e来表示:a=m×b^e。在任意一个这样的系统中,可以选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd…ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s代表+或者-)来表示正负,这样m必须是正的。e是指数。
单精度浮点数
单精度浮点数,是用来表示带有小数部分的实数,一般用于科学计算。它占用4个字节(32位)存储空间,包括符号位1位、阶码8位、尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。
单精度浮点数格式是一种计算机数据格式,在计算机存储器中占用4个字节(32 bits),利用“浮点”(浮动小数点)的方法,可以表示一个范围很大的数值。在IEEE 754-2008的定义中,32-bit base 2格式被正式称为binary32格式。这种格式在IEEE 754-1985被定义为single,即单精度。
单精度浮点数在表示范围和精度上做了一定的权衡,它能够表示较大范围的数值,但在精度上相对较低。这意味着在一些需要高精度计算的情况下,可能会出现舍入误差。然而,对于不需要极高精度的任务来说,单精度浮点数通常可以提供足够的准确性,并广泛应用于一般的科学计算、图形处理、游戏开发等领域。
3. 字符类型(Character Type)
- char:
- 大小:2字节(16位)
- 范围:0到65,535(即Unicode码点范围)
- 默认值:‘\u0000’(空字符)
- 用途:用于表示单个字符,Java中的char类型采用Unicode编码,因此可以表示世界上大多数语言的字符。
4. 布尔类型(Boolean Type)
- boolean:
- 大小:没有明确的大小(在JVM实现中可能有所不同),但通常认为是1位或1字节
- 范围:true或false
- 默认值:false
- 用途:用于表示逻辑上的真或假,通常用于条件判断和控制流语句中。
注意事项
- Java中的基本数据类型都是值类型(Value Types),这意味着当你将一个基本数据类型的变量赋值给另一个变量时,实际上是将值复制了一份。
- 对于整数类型,Java提供了字面量后缀来表示不同的类型,如L表示long,F表示float等。如果不指定后缀,Java会根据字面量的值来推断其类型(在可能的情况下会推断为int类型)。
- Java中的char类型可以表示Unicode字符,因此可以存储世界上大多数语言的字符。但是,当处理多字节字符集(如UTF-8)时,需要注意字符编码的问题。
- 浮点类型在表示小数时可能会存在精度问题,因此在需要高精度计算的场合(如金融计算)中,建议使用BigDecimal类来代替浮点类型。
了解Java的基本数据类型是掌握Java编程的基础之一。通过合理使用这些类型,可以编写出高效、健壮的Java程序。
当然可以。以下是一些使用Java基本数据类型的示例代码:
public class PrimitiveDataTypesDemo {public static void main(String[] args) {// 整数类型byte byteVar = 100; // byte类型,范围:-128到127short shortVar = 30000; // short类型,范围:-32,768到32,767int intVar = 1000000; // int类型,范围:-2^31到2^31-1long longVar = 10000000000L; // long类型,范围:-2^63到2^63-1,注意L后缀// 浮点类型float floatVar = 3.14F; // float类型,范围:±3.40282347E+38F,注意F后缀double doubleVar = 3.141592653589793; // double类型,范围:±1.79769313486231570E+308// 字符类型char charVar = 'A'; // char类型,范围:0到65,535(Unicode码点)// 布尔类型boolean booleanVar = true; // boolean类型,只有true和false两个值// 输出变量值System.out.println("byteVar: " + byteVar);System.out.println("shortVar: " + shortVar);System.out.println("intVar: " + intVar);System.out.println("longVar: " + longVar);System.out.println("floatVar: " + floatVar);System.out.println("doubleVar: " + doubleVar);System.out.println("charVar: " + charVar);System.out.println("booleanVar: " + booleanVar);// 类型转换示例(自动类型转换和强制类型转换)int intFromDouble = (int) doubleVar; // 强制类型转换,double转int,会丢失精度double doubleFromInt = intVar; // 自动类型转换,int转doubleSystem.out.println("intFromDouble (after casting double to int): " + intFromDouble); // 输出时会丢失小数部分System.out.println("doubleFromInt (after automatic casting int to double): " + doubleFromInt);}
}
在这段代码中,我们声明并初始化了Java的八种基本数据类型的变量,并通过System.out.println方法输出了它们的值。此外,还展示了两种类型转换:
- 强制类型转换:将
double类型的变量转换为int类型。这种转换会丢失小数部分,只保留整数部分。 - 自动类型转换:将
int类型的变量转换为double类型。这种转换是安全的,因为double类型能够表示更大的范围和精度。
请注意,在实际编程中,应该谨慎使用类型转换,特别是强制类型转换,因为它可能会导致数据丢失或程序错误。
相关文章:
Java学习教程,从入门到精通,Java 基本数据类型详解(5)
Java 基本数据类型详解 Java是一种强类型语言,这意味着在Java程序中,每个变量都必须明确声明其数据类型。Java提供了八种基本数据类型(Primitive Data Types),这些类型都是预先定义好的,并且每种类型都占用…...
使用Flask实现本机的模型部署
前言 模型部署是指将大模型运行在专属的计算资源上,使模型在独立的运行环境中高效、可靠地运行,并为业务应用提供推理服务。其目标是将机器学习模型应用于实际业务中,使最终用户或系统能够利用模型的输出,从而发挥其作用。 一、设…...
基于SSM的校园跑腿网站的设计与实现
文未可获取一份本项目的java源码和数据库参考。 课题来源及研究的目的和意义 随着网络技术的不断完善与发展,各种互联网公司不断如雨后春笋般不断涌现,丰富了人们生活的各个方面。近年来由于 Online To 0ffline即线上到线下(020)模式的发展和兴起&…...
【Java】正则表达式详解
目录 引言 一、基本概念 1.1 元字符 1.2 预定义字符类 1.3 边界匹配符 1.4 数量标识符 1.5 捕获与非捕获分组 二、Java中的正则表达式支持 三、正则表达式的使用示例 3.1 匹配字符串 3.2 替换字符串 3.3 分割字符串 3.4 使用Pattern和Matcher 3.5 捕获组和后向…...
Java知识巩固(七)
目录 面向对象 面向对象三大特征 封装 继承 多态 多态 深拷贝和浅拷贝区别了解吗?什么是引用拷贝? 浅拷贝 深拷贝 面向对象 万物皆为对象,也就是描述某个事物解决问题的过程中所发生的事情。 面向对象三大特征 封装 封装是指把一个对象的状态信息&…...
Ubuntu22.04 更换源
Ubuntu22.04 更换网易163源 1、编辑/etc/apt/sources.list文件 1 sudo nano /etc/apt/sources.list 2、清空文件内容,拷贝下列163源到文本。 1 2 3 4 5 6 7 8 deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse deb http://mirro…...
江恩理论和波浪理论的结合
结合波浪理论和江恩理论需要综合考虑市场波动的形态以及时间和价格的关系。这两者都是技术分析中的重要工具,能够帮助投资者更好地理解市场的趋势和未来的走势。 波浪理论(Elliott Wave Theory) 波浪理论是由Ralph Nelson Elliott提出的&…...
AJAX——AJAX 取消请求
利用 abort()方法取消请求 本文分享到此结束,欢迎大家评论区相互讨论学习,下一篇继续分享AJAX中请求重复发送问题的学习。...
ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)
【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 目录 前…...
嵌入式QT中基本工程模板分析
大家好,今天主要来分享一下,如何分析一下QT的工程代码文件。 第一:QT工程分析...
Linux网络:UDP socket - 简单聊天室
Linux网络:UDP socket - 简单聊天室 聊天通信架构ServerInetAddrUdpServerMessageRoutermain Client测试 聊天通信架构 本博客基于Linux实现一个简单的聊天通信服务,以熟悉Linux的网络接口。 总代码地址:[UDPsocket-简单聊天通信] 文件结构…...
Codeforces Round 646 (Div. 2) E. Tree Shuffling(树,贪心)
题目链接 Codeforces Round 646 (Div. 2) E. Tree Shuffling 思路 考虑一个节点 u u u,显然它子树中的操作可以由它本身和祖先来进行。如果它的祖先有比它花费更小的,直接跳过节点 u u u。 我们分别记录每一个子树中位置不对的 0 0 0和 1 1 1的个数&…...
HCIE-Datacom题库_11_IPsecVPN【17道题】
一、单选题 1.IPsecSA(SecurityAssociation,安全联盟)有两种生成方式,分别是手工方式和IKE自动协商方式,以下关于这两种方式的描述中,错误的是哪一项? 手工方式和IKE方式建立的SA都支持动态刷新 IKE方式建立的SA,其生存周期由…...
Dongle Sentinal在Jenkins下访问不了的问题
背景: 工作站部署的jenkins的脚本无法正常打包,定位后发现是本地获取不了license,但是使用usb over network的远程license都能获取并正常打包 分析: 获取不了license的原因是本地无法识别dongle。根据提供信息,之前…...
X射线衍射(X-ray Diffraction,XRD)小白版
文章目录 实验过程原理晶体构成X射线波长diffraction 干涉效应 Braggs Law晶体间距d散射角度θ半波长λ/2公式 公式名称由来应用设备 实验过程 In the X-ray experiment , a sample is placed into the center of an instrument and illuminated with a beam of X-rays. 在X射…...
Nordic 定时器系统app timer[获取时间戳]
获取时间戳 想要在Nordic 定时器系统中获取时间戳,也就是是在调用app_timer的时候时间戳要有效,我们可以看看定时器系统初始化: ret_code_t app_timer_init(void) {ret_code_t err_code;drv_rtc_config_t config {.prescaler APP_TIMER_CONFIG_RTC_FREQUENCY,.int…...
【Linux】实验:mkdir 命令 、 tee 命令
#1024程序员节|征文# 1.命令说明 本文主要实验 linux 的两个命令:mkdir -p 路径、 tee 创建文件。 命令:mkdir -p 路径 说明:该命令将自动创建路径下的目录及子目录,结尾可以/ 也可以不带/,默认都是建文…...
asp.net core mvc发布时输出视图文件Views
var builder WebApplication.CreateBuilder(args); builder.Services.AddRazorPages();builder.Services.AddControllersWithViews(ops > {//全局异常过滤器,注册ops.Filters.Add<ExceptionFilter>(); })// Views视图文件输出到发布目录,视图文…...
服务器模块测试
目录 测试逻辑 测试工具 测试 测试逻辑 我们可以使用一个简单的业务处理逻辑来进行测试。 最简单的,我们业务逻辑就直接返回一个固定的字符串 void Message(const PtrConnection&con,Buffer* inbuffer) //模拟用户新数据回调 {inbuffer->MoveReadOf…...
ATTCK 框架讲解
摘要 ATT&CK框架作为MITRE公司开发的网络攻击行为知识库,自2015年发布以来,已成为信息安全领域的重要工具。该框架通过提炼和归纳真实世界中的网络威胁事件,以攻击者的视角构建了一套系统化的战术和技术分类体系。本文详细阐述了ATT&…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
