Java基础(二):八种基本数据类型详解

article/2025/6/9 5:21:59

Java基础系列文章

Java基础(一):发展史、技术体系与JDK环境配置详解

Java基础(二):八种基本数据类型详解

目录

  • 一、比特(bit)和字节(Byte)
    • 1、定义与换算关系
    • 2、应用场景差异
  • 二、各类型详解
    • 1、整数类型:byte、short、int、long
    • 2、浮点类型:float、double
    • 3、字符类型:char
      • 3.1、字符字面量(最常见)
      • 3.2、 Unicode转义表示(\uXXXX 格式)
      • 3.3、 转义字符
      • 3.4、 整数转换
    • 4、布尔类型:boolean
  • 三、基本数据类型转换
    • 1、自动类型转换(隐式转换)
    • 2、强制类型转换(显式转换)
    • 3、不同数据类型运算


一、比特(bit)和字节(Byte)

1、定义与换算关系

  • 比特(bit)是计算机中最小的数据单位,表示二进制的一位,只能取01。其英文缩写为小写字母b(如100b)
  • 字节(Byte)是计算机中基本的数据存储单位,1字节由8个比特组成,即1 Byte = 8 bit。其缩写为大写字母B(如100B)
单位缩写大小
1 字节1 Byte (B)8 bit (b)
1 千字节1 KB1024 Bytes
1 兆字节1 MB1024 KB
1 吉字节1 GB1024 MB
1 太字节1 TB1024 GB

2、应用场景差异

  • 比特通常用于衡量网络传输速率(如带宽)
    • 例如100Mbps(兆比特每秒)表示每秒传输的比特数,1兆 = 1,000,000(百万)
    • 日常十进制换算:100Mbps宽带的理论最高下载速度为 100 ÷ 8 = 12.5 MB/s 100 ÷ 8 = 12.5 \text{MB/s} 100÷8=12.5MB/s
    • 使用二进制换算:100Mbps宽带为 100 , 000 , 000 ÷ 1024 ÷ 1024 ÷ 8 ≈ 11.92 MB/s 100,000,000 ÷ 1024 ÷ 1024 ÷ 8 ≈ 11.92 \text{MB/s} 100,000,000÷1024÷1024÷811.92MB/s
  • 字节则用于表示数据存储容量或传输量
    • 例如文件大小(如10MB)、内存容量等
    • 下载速度也常用kB/sMB/s表示

二、各类型详解

在这里插入图片描述

1、整数类型:byte、short、int、long

  • 整数字面量默认类型为int
  • 定义long类型常量须后加‘l’或‘L’后缀
    • 必须加L/l:当数值超出int范围时
    • 建议加L:即使数值在int范围内,也推荐添加大写L以提高代码可读性
    • 避免使用l:防止与数字1混淆
  • byte占用8个bit位,共28=256个表达方式,负数(128个):-1~-128;正数(128个):0~127
  • byte和short常用于节省内存的场景,如处理文件或网络数据流
类型位数取值范围默认值包装类
byte8-27 ~ 27-1(-128~1270Byte
short16-215 ~ 215-1(-32768 ~ 32767)0Short
int32-231 ~ 231-1(约21亿多0Integer
long64-263 ~ 263-1(-9223372036854775808 ~ 9223372036854775807)0LLong

不同整数类型的存储空间和表示数值的范围:

不同整数类型的存储空间和表示数值的范围

2、浮点类型:float、double

  • 浮点数字面量默认类型为double
  • 定义float类型的变量须加‘f’或‘F’后缀
  • 浮点型常量有两种表示形式:
    • 十进制数形式:如:5.12、512.0f、 (必须有小数点)
    • 科学计数法形式:如:5.12e2( 5.12 × 10 2 5.12 \times 10^{2} 5.12×102)、100E-2( 100 × 10 − 2 100 \times 10^{-2} 100×102 100 ÷ 10 2 100 \div 10^{2} 100÷102
  • 浮点运算可能存在精度丢失问题,金融计算建议使用BigDecimal
类型位数取值范围精度默认值包装类
float32约±3.4e38( ± 3.4 × 10 38 ±3.4 \times 10^{38} ±3.4×1038约 6~7 位十进制有效数字0.0fFloat
double64约±1.7e308( ± 1.7 × 10 308 ±1.7 \times 10^{308} ±1.7×10308约 15~16 位十进制有效数字0.0dDouble

关于精度举例说明:

float f = 0.123456789f;
double d = 0.123456789123456789;System.out.println(f);  // 输出:0.12345679(只有前 7 位是可靠的)
System.out.println(d);  // 输出:0.12345678912345678(保留了更多有效数字)

关于浮点型精度的说明:

  • 并不是所有的小数都能可以精确的用二进制浮点数表示
  • 二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂

3、字符类型:char

  • Java中的char类型是固定长度的2字节,即使是中文、英文或其他字符
  • 常用汉字:在Java内存中用一个char表示,占2个字节
  • 扩展汉字(生僻字):超出char表示范围,用两个char表示,占4个字节
  • 如果你将汉字以UTF-8编码形式存储(如写入文件或通过网络传输),一个汉字通常会占用3个字节(生僻字可能是4个字节
类型位数取值范围默认值包装类
char160 ~ 65535(Unicode)‘\u0000’Character
  • char类型是可以进行运算的。因为char类型都对应有Unicode码,可以看做是一个数值
char c12 = 'a'; // ASCII对应数字97
char c13 = 65;   // 这里就是ascii码65,对应字符A
System.out.println(c12+c13); // 97+65=162

3.1、字符字面量(最常见)

  • 最常见的写法,表示单个字符
//使用一对''表示,内部有且仅有一个字符
char c1 = 'a';
char c2 = '中';
char c3 = '1';
char c4 = '%';
char c5 = 'γ';//编译不通过
//char c6 = '';
//char c7 = 'ab';

3.2、 Unicode转义表示(\uXXXX 格式)

  • ‘使用\u开头加4位十六进制表示Unicode编码
  • 如下unicode表,\u + 纵坐标 + 横坐标 如:\u0040表示为@

在这里插入图片描述

3.3、 转义字符

  • 常见控制字符,如换行、制表符等
转义字符说明Unicode表示方式
\n换行符\u000a
\t制表符\u0009
\"双引号\u0022
\'单引号\u0027
\\反斜线\u005c
\b退格符\u0008
\r回车符\u000d

3.4、 整数转换

  • 使用整数转换为对应的字符
char c = 65;  // ASCII 码 65 对应 'A'
System.out.println(c);  // 输出: Achar ch = 0x4F60;  // 十六进制 Unicode 表示 '你'
System.out.println(ch);  // 输出: 你

在这里插入图片描述

4、布尔类型:boolean

类型位数取值范围默认值包装类
boolean1true/falsefalseBoolean

Java 语言规范未强制规定 boolean 的大小,仅表示其表示 1 位信息,具体实现由虚拟机决定。这导致不同 JVM 的差异:

  • 通常占用 4 字节:根据《Java 虚拟机规范》,单独使用的 boolean 值在编译时会被转换为int 类型(占用 4 字节),以提高 32 位处理器的存取效率。例如,局部变量或方法栈中的 boolean 变量可能按 int 处理
  • 可能占用 1 字节:部分虚拟机(如 HotSpot)在存储对象的成员变量时,可能将 boolean 字段压缩为 1 字节。例如,Oracle 的某些 JVM 实现中,boolean 字段实际占用 1 字节
  • 数组元素:统一为1 字节(编码为 byte 数组)

三、基本数据类型转换

1、自动类型转换(隐式转换)

  • 将较小的数据类型转换为较大的数据类型(不会丢失信息)。由编译器自动完成
  • char与short同级,但不可直接转换,需强制转换
    在这里插入图片描述

示例:

int a = 10;
long b = a;        // 自动转换:int → long
double c = b;      // 自动转换:long → doubleint x = 5;
double y = x + 3.14;  // 结果为 double 类型char ch = 'A';
int code = ch;        // 自动转换:char → int(输出 Unicode 值 65)

2、强制类型转换(显式转换)

  • 将大范围类型转换为小范围类型时,必须使用强制类型转换,可能会造成精度丢失溢出

精度丢失示例:

double d = 123.456;
int i = (int) d;      // 强制转换:double → int(结果为123,精度丢失)

精度溢出示例:

  • 溢出是指一个数值超出了该数据类型所能表示的范围,导致结果不正确甚至反方向回绕
  • 想象你有一个 3 位的计数器,只能表示 0 到 999,如果你加到 1000,它就回到了 000——这就是溢出
byte b = 127;         // byte 的最大值是 127
b = (byte)(b + 1);    // 加1后会溢出,结果是 -128long l = 3000000000L;
int j = (int) l;      // 强制转换:long → int(溢出,结果为-1294967296)

3、不同数据类型运算

byte, short, char 运算 ➜ 自动变成 int

byte a = 10;
byte b = 20;
// byte c = a + b;   // 编译错误:结果是 int
int c = a + b;       // 正确//byte、short之间做运算
byte b3 = 12;
short s1 = 10;
//short s2 = b3 + s1; // 编译不通过 需要用int来接收
int i4 = b3 + s1;	  // 正确

int 与 long 运算 ➜ 提升为 long

int i = 1000;
long l = 2000L;
long result = i + l;  // i 自动转为 long

int 与 float 运算 ➜ 提升为 float

int i = 5;
float f = 2.5f;
float res = i + f;    // i 转为 float,结果是 7.5

float 与 double 运算 ➜ 提升为 double

float f = 3.5f;
double d = 1.2;
double res = f + d;   // f 转为 double,结果是 4.7

http://www.hkcw.cn/article/xaTSjcSjoX.shtml

相关文章

数据安全合规体系构建的“三道防线“

引言 "三道防线"模型架构图 #mermaid-svg-wbeppAbwa3Vb3nL2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wbeppAbwa3Vb3nL2 .error-icon{fill:#552222;}#mermaid-svg-wbeppAbwa3Vb3nL2 .error-text{fi…

MySQL强化关键_019_索引优化

目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 (1)使用范围查找 (2)索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型,查…

ABAP锁对象

1、锁表 在一些业务场景中,我们需要将某张表或某张表中的某些数据锁定,防止多人对该表进行操作,导致数据出现问题。SAP对于表的锁定,有专门的锁对象。 1.1、创建锁 事务代码SE11,表的锁对象名称,需要以E…

YOLO-V2 (学习记录)

目录 一、记录YOLO-v2 的处理流程步骤 二、优势与不足 三、细节分析 1.候选框K-means计算细节 2.网络输出 3.损失函数(Loss Function) 学习之前,需要补充下论文中提到知识点。 1.什么是Batch Normalization 参考博文:Batc…

AI Coding 资讯 2025-06-03

Prompt工程 RAG-MCP:突破大模型工具调用瓶颈,告别Prompt膨胀 大语言模型(LLM)在工具调用时面临Prompt膨胀和决策过载两大核心挑战。RAG-MCP创新性地引入检索增强生成技术,通过外部工具向量索引和动态检索机制,仅将最相关的工具信…

CAMEL-AI开源自动化任务执行助手OWL一键整合包下载

OWL 是由 CAMEL-AI 团队开发的开源多智能体协作框架,旨在通过动态智能体交互实现复杂任务的自动化处理,在 GAIA 基准测试中以 69.09 分位列开源框架榜首,被誉为“Manus 的开源平替”。我基于当前最新版本制作了免安装一键启动整合包。 CAMEL-…

线程池RejectedExecutionException异常

文章目录 1、报错2、定位3、修复4、线程池使用的一点思考 1、报错 检索项目日志时,发现一个异常堆栈信息,核心报错: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.CompletableFuture$AsyncSupply480a10c7…

视频监控管理平台EasyCVR安防小知识:监控摄像头异响问题排查与处理

在视频监控系统广泛应用于日常生活的当下,监控摄像头出现异响是常见且影响使用体验的问题。为快速定位和解决该问题,特制定本应用解决方案,依据异响来源分为硬盘录像机异响与监控摄像头异响两类进行处理。 一、硬盘录像机发出异响 硬盘录像机…

NX890NX894美光固态闪存NX906NX908

美光NX系列固态闪存深度解析 技术架构与性能突破 美光NX系列固态闪存(如NX890、NX894、NX906、NX908)的技术核心基于G9 NAND技术,通过优化晶体管结构与制程工艺,显著提升存储密度与读写速度。例如,NX895的MT29F8T08G…

RHEL7安装教程

RHEL7安装教程 下载RHEL7镜像 通过网盘分享的文件:RHEL 7.zip 链接: https://pan.baidu.com/s/1ExLhdJigj-tcrHJxIca5XA?pwdjrrj 提取码: jrrj --来自百度网盘超级会员v6的分享安装 1.打开VMware,新建虚拟机,选择自定义然后下一步 2.点击…

无人机智能识别交通目标,AI视觉赋能城市交通治理新高度

在城市化快速发展的当下,如何实现对道路交通的智能化管理、保障出行安全,成为城市治理的重要命题。传统的交通监控往往依赖地面摄像头,受限于固定视角与安装环境。而今,随着人工智能与无人机技术的深度融合,一种更高效…

使用 HTML + JavaScript 实现文章逐句高亮朗读功能

在这个信息爆炸的时代,我们每天都要面对大量的文字阅读。无论是学习、工作还是个人成长,阅读都扮演着至关重要的角色。然而,在快节奏的生活中,我们往往难以找到足够的安静时间专注于阅读。本文用 HTML JavaScript 实现了一个基于…

《TCP/IP 详解 卷1:协议》第5章:Internet协议

IPv4和IPv6头部 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP 数据都通过IP数据报传输。IP提供了一种尽力而为、无连接的数据报交付服务。 IP头部字段 IPv4 头部通常为 20 字节(无选项时),而 IPv6 头部固定为 40 字节。IPv6 不…

WPS word 已有多级列表序号

wps的word中,原来已生成的文档里,已存在序号。比如,存在2、2.1、2.1.1、2.1.1.1、2.1.1.1.1 5层序号,而且已分为5级。但增加内容的时候,并不会自动增加序号,应该如何解决? 原来长这样&#xff…

5 个经典的大模型微调技术

传统微调方法(如下图所示)对于大语言模型而言并不可行,因为这些模型具有数百亿甚至千亿的参数量,而且显存需求高达数百GB,并非所有人都能获得如此规模的计算资源。 但如今,我们拥有多种优化大语言模型的微调…

爱耕云课时管理系统评测

1 核心功能模块与代码实现 1.1 智能排课引擎(Python伪代码示例) 爱耕云的排课系统采用约束满足算法(Constraint Satisfaction Problem)解决教培机构最头疼的资源冲突问题。该系统将教师、教室、课程和时间段抽象为多维资源&…

Go的隐式接口机制

正确使用Interface 不要照使用C/Java等OOP语言中接口的方式去使用interface。 Go的Interface的抽象不仅可以用于dynamic-dispatch 在工程上、它最大的作用是:隔离实现和抽象、实现完全的dependency inversion 以及interface segregation(SOLID principle中的I和D)。…

Linux总结

一、Linux linux系统的构成 1.linux系统内核:提供最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通信、调度IO等。 2.系统级应用程序:出厂自带程序,可供用户快速上手操作系统。如:文件管理…

嵌入式复习小练

1.ARM处理器中用作程序计数器PC的通用寄存器是() A.R12 B.R13 C.R14 D.R15 答案:D。在 ARM 处理器中,R15 用作程序计数器(PC) ,用于存放下一条要执行指令的地址 2.以下关于ARM程序状态寄存器C…

Python Day41学习(日志Day8复习)

对信贷数据中的离散特征重新进行独热编码 重写代码时出现的问题: .tolist()是一个方法对象,调用时须加()。刚开始书写时漏掉了(),导致报错。 复习“日志Day8”的内容 今日有点事耽搁了,少复习了些内容,明日继续加油&…