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

7、Java基本数据类型的使用细节探讨(超详细版本)

Java基本数据类型的使用细节探讨

  • 一、整数类型
  • 二、浮点数
  • 三、字符型
  • 四、布尔型

我觉得基本数据类型大家学计算机的应该都懂,但是韩顺平老师讲的基本类型的使用细节我觉得有必要记录一下,重新学的时候才发现有了新的感悟!

一、整数类型

在这里插入图片描述
使用细节:
1、Java各整型类型有固定的范围和字段长度,不受具体OS[操作系统]的影响,以保证Java程序的可移植性。(简单理解就是必须要标准一样,如果不一样的话,不同操作系统下就会产生不一样的结果)<——个人语言🤣不严谨哈

2、Java的整型变量(具体值)默认为int型,声明long型常量须在后面加 ’ l ’ 或 ’ L '。
(这里要注意,不要写成 int a = 5L,我们知道 int 是4字节的,而 long 是8字节的,相当于把8字节的数据硬是放进4字节的空间,肯定放不了滴!相反,把 int 型放进 long 型是放的了的,这是忘记加后缀的情况。)

3、Java程序中变量常声明为 int 型,除非不足以表达大数,才用 long 。(其实就是避免空间浪费啦)

4、bit:计算机中的最小存储单元。
  byte:计算机中基本存储单元,1byte = 8bit。(比较基础的计组知识,一定要记住。)

二、浮点数

在这里插入图片描述
使用细节:
1、面试可能会问:浮点数 = 符号位 + 指数位 + 尾数位
(想了解更清楚的可以看一下这个文章:一文彻底掌握浮点数)

2、与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受具体OS的影响。[float 4个字节,double 8个字节]

3、Java的浮点型常量(具体值)默认为double型,声明为float型常量,须后加’ f ‘或’ F '。

float num1 = 1.1F;		//正确
double num2 = 1.1;		//正确
double num3 = 1.1f;		//正确!小精度可以放进大精度的类型里面

最后一条代码可以这样理解:一个1米的小孩在2米的床上睡觉,但是不能在5厘米的床上睡觉(那应该是豌豆公主吧🥰)
补充:记得要加’ f ‘和’ F ',不然报错。
在这里插入图片描述

4、浮点型常量有两种表达方式
①十进制数形式:5.12   512.0f   .512(前面的0可以省略,但必须有小数点)
②科学计数法形式: 5.12e2【5.12 * 102 】  5.12e-2【5.12 / 102】,里面的e也可以换成E
在这里插入图片描述

4、通常情况下,应该用double型,因为它比float型更精确。
在这里插入图片描述
通过上面的结果可以看到,float后面有部分丢失了,所以尽量使用double型。

5、浮点数使用陷阱:2.7 和 8.1 / 3 的比较
先来段代码:

/*** @author 颜安青*/
public class Hello{public static void main(String[] args){double num1 = 2.7;double num2 = 8.1 / 3;System.out.println("num1: "+num1);System.out.println("num2: "+num2);if(num1 == num2)System.out.println("num1 == num2");elseSystem.out.println("num1 != num2");}
}

看到这里你是不是觉得 num1 == num2 呢?NoNoNo,错啦,看一下输出结果吧。
在这里插入图片描述
按照我们的数学思维,8.1 / 3 应该是等于2.7的,但是从计算机的角度上看,计算机中对浮点数的表示并非百分百精确的,在表示和计算过程中都有可能丢失精度。并且,8.1这个数本身在计算机中用double类型存储,可能存储成8.100000001,这都是可能的,所以浮点数的运算结果比较是不等的。(个人理解哈,如果想了解的更详细记得去看一文彻底掌握浮点数))

那么怎么判断两个浮点数相等呢?其实我们应该判断的是:两个数之间的差值的绝对值在我们规定的某个精度范围内,只要在范围内就可以近似相等。

if(Math.abs(num1-num2) < 0.000001){			//0.000001是可以自己规定的System.out.println("差值非常小,到规定的精度范围内,认为近似相等!");
}

结果:
在这里插入图片描述

三、字符型

Java中字符类型是char,占两个字节(可以存放汉字),多个字符用字符串String。
区分一下:C语言中没有Boolean和String型,并且char类型是占一个字节的,当时我学习的时候也很震惊😄我通过一些资料的查询,就简单理解为:不同语言编译器用的编码集不一样,一些类型的所占字节也会随之变化,总结就是类型大小由编译器决定。 <–所以有可能C语言中char类型也会有两个字节,极少数情况。可以看一下别人的回答:char为什么占两个字节)

使用细节:
1、字符常量是用单引号(‘’)括起来的单个字符。
在这里插入图片描述
这些是基础,当各位都是会的,不讲很细。

2、Java中还允许使用转义字符’ \ '来将其后的字符转变为特殊字符型常量。

char c = '\n';		//换行

在这里插入图片描述

3、在Java中,char的本质是一个整数。我们要知道一个概念,Java中默认使用的编码是Unicode码,所以输出的是Unicode码对应的字符。

怎么理解呢?我们可以用计算机输入字母、数字、中文、符号等内容,而计算机是用二进制的方式去存储的,所以我们输入的字符每一个都对应着一个独一无二的二进制数,当输入的时候将字符存储为二进制数,当输出的时候将二进制数转换成字符。
‘a’ 对应的十进制是97,这也意味着,我们可以 char c = ‘a’,也可以char c = 97的形式去赋值,也可以进行运算。
想了解字符编码的可以看这几个链接:
⭐⭐超级推荐去看这个:程序员必备:彻底弄懂常见的7种中文字符编码
结合Java详谈字符编码和字符集

这里提示一点,我们的中文其实每一个汉字都有对应的编码,比如大家可以打开一个网站自己去查看汉字对应的编码:Unicode转换
在这里插入图片描述

白框框里面的是中文字符,而黑框框对应的就是Unicode码(来自程序员的浪漫啊❤)

敲重点:面试时问字符类型本质,那该怎么回答呢?
个人理解:字符都有相对应的编码值,字符型通过二进制的形式存储到计算机中,而输出时将二进制数转换成字符显示。
比如’ a ‘:
存储:’ a ’ --> 码值97 --> 二进制(1100001) --> 存储
读取:二进制(1100001) --> 97 --> ’ a ’ --> 显示

补充个小点:平时工作中用的最多的是utf-8编码集,它最灵活了
99%的前端写网页时都会加上,99%的后端工程师新建数据库时都会加上DEFAULT CHARSET = utf8
来个链接拓展:mysql编码问题——charset=utf8你真的弄明白了吗?

四、布尔型

boolean类型数据只允许取值true和false,无null,占一个字节,适用于逻辑运算。

使用细节:
不可以0或非0的整数替代true和false,这点和C语言不同。
在这里插入图片描述

本人正在B站跟着韩顺平老师学Java(非广告),所以做个笔记仅供学习,文章虽标为原创,但大体思路是韩顺平老师的授课思路,在此基础上加上了自己的理解,不喜勿喷哦。
大家一起学,一起进步!!
各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。

相关文章:

7、Java基本数据类型的使用细节探讨(超详细版本)

Java基本数据类型的使用细节探讨 一、整数类型二、浮点数三、字符型四、布尔型 我觉得基本数据类型大家学计算机的应该都懂&#xff0c;但是韩顺平老师讲的基本类型的使用细节我觉得有必要记录一下&#xff0c;重新学的时候才发现有了新的感悟&#xff01; 一、整数类型 使用细…...

MFC实现点击列表头进行排序

MFC实现点击列表头排序 1、添加消息处理函数 在列表窗口右键&#xff0c;类向导。选择 IDC_LIST1&#xff08;我的列表控件的ID&#xff09;&#xff0c;消息选择LVN_COLUMNCLICK。 2、消息映射如下 然后会在 cpp 文件中生成以下函数 void CFLashSearchDlg::OnLvnColumnclic…...

用龙梦迷你电脑福珑2.0做web服务器

用龙梦迷你电脑福珑2.0上做web服务器是可行的。已将一个网站源码放到该电脑&#xff0c;在局域网里可以访问网站网页。另外通过在同一局域网内的一台windows10电脑上安装花生壳软件&#xff0c;也可以在外网访问该内网服务器网站网页。该电脑的操作系统属于LAMP。在该电脑上安装…...

秋招后端开发面试题 - JVM类加载机制

目录 JVM类加载机制前言面试题能说一下类的生命周期吗&#xff1f;类加载的过程知道吗&#xff1f;类加载器有哪些&#xff1f;什么是双亲委派机制&#xff1f;为什么要用双亲委派机制&#xff1f;如何破坏双亲委派机制&#xff1f;如何判断一个类是无用的类&#xff1f; JVM类…...

OceanBase 分布式数据库【信创/国产化】- OceanBase 配置项和系统变量概述

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 配置项和系统变量概述前言OceanBase 数据更新架构OceanBase 配置项和系统变量概述配置项配置项分类配置项查询系统变量系统变量分类系统变量查询配置项与系统变量的区分OceanBase 分布式数据库…...

单单单单单の刁队列

在数据结构的学习中&#xff0c;队列是一种常用的线性数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff09;的原则。而单调队列是队列的一种变体&#xff0c;它在特定条件下保证了队列中的元素具有某种单调性质&#xff0c;例如单调递增或单调递减。单调队列在处理…...

电脑windows系统压缩解压软件-Bandizip

一、软件功能 Bandizip是一款功能强大的压缩和解压缩软件&#xff0c;具有快速拖放、高速压缩、多核心支持以及广泛的文件格式支持等特点。 Bandizip软件的功能主要包括&#xff1a; 1. 支持多种文件格式 Bandizip可以处理多种压缩文件格式&#xff0c;包括ZIP, 7Z, RAR, A…...

图片公式识别@文档公式识别@表格识别@在线和离线OCR工具

文章目录 abstract普通文字识别本地软件识别公式扩展插件下载小结 在线识别网站/API&#x1f47a;Quicker整合(推荐)可视化编辑和识别公式其他多模态大模型识别图片中的公式排版 开源模型 abstract 本文介绍免费图片文本识别(OCR)工具,包括普通文字识别,公式识别,甚至是手写公…...

Java高阶私房菜:JVM分代收集算法介绍和各垃圾收集器原理分解

目录 什么是分代收集算法 GC的分类和专业术语 什么是垃圾收集器 垃圾收集器的分类及组合 ​编辑 应关注的核心指标 Serial和ParNew收集器原理 Serial收集器 ParNew收集器 Parallel和CMS收集器原理 Parallel 收集器 CMS收集器 新一代垃圾收集器G1和ZGC G1垃圾收集器…...

为什么IB损失要在100epochs后再用?

在给定的代码中&#xff0c;参数start_ib_epoch用于控制从第几轮开始使用IB&#xff08;Instance-Balanced&#xff09;损失函数进行训练。具体来说&#xff0c;如果start_ib_epoch的值大于等于100&#xff0c;那么在训练的前100轮中将使用普通的交叉熵损失函数&#xff08;CE&…...

《Video Mamba Suite》论文笔记(4)Mamba在时空建模中的作用

原文翻译 4.4 Mamba for Spatial-Temporal Modeling Tasks and datasets.最后&#xff0c;我们评估了 Mamba 的时空建模能力。与之前的小节类似&#xff0c;我们在 Epic-Kitchens-100 数据集 [13] 上评估模型在zero-shot多实例检索中的性能。 Baseline and competitor.ViViT…...

【备战软考(嵌入式系统设计师)】10 - 软件工程基础

这一部分的内容是概念比较多&#xff0c;不要理解&#xff0c;去感受。 涉及的知识点是嵌入式系统开发和维护的部分&#xff0c;也就是和管理相关的&#xff0c;而不是具体如何进行嵌入式系统开发的细节。 系统开发生命周期 按照顺序有下面几个阶段&#xff0c;我们主要要记…...

随手笔记-GNN(朴素图神经网络)

自己看代码随手写的一点备忘录&#xff0c;自己看的&#xff0c;不喜勿喷 GNN (《------ 代码) 刚开始我还在怀疑为什么没有加weigth bias&#xff0c;已经为什么权重才两个&#xff0c;原来是对node_feats进行的network的传播&#xff0c;而且自己内部直接进行了。 下面是一…...

C 语言指针怎么理解?

在今天的学习中&#xff0c;我注意到有位学员似乎对 C 语言指针的理解有些困惑。为了帮助大家更好地理解&#xff0c;我来举个例子。 C 语言指针就好比 Windows 桌面上常见的快捷方式。快捷方式可以指向某个游戏&#xff0c;这就是普通指针&#xff1b;它也可以指向另一个快捷…...

HTTP协议:通信机制、特点及实践应用

目录 前言 1. 运行机制 2. 通信方式 3. 主要特点 4. 统一资源标识符&#xff08;URL&#xff09; 5. HTTP报文 6. HTTP请求 7. HTTP响应 8. 实体 9. 持续连接 结语 前言 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是互联网上应用最广泛的一种协议&a…...

Leetcode—289. 生命游戏【中等】

2024每日刷题&#xff08;126&#xff09; Leetcode—289. 生命游戏 算法思想 实现代码 class Solution { public:void gameOfLife(vector<vector<int>>& board) {int rows board.size();int cols board[0].size();int neighbors[3] {0, 1, -1};vector<…...

系统运维(虚拟化)

1.VLAN VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 每个VLAN是一个广播域&#xff0c;VLAN内的主机间可以直接通信&#xff0c;而VLAN间则不能直接互通。这样&#xff0c;广播报…...

Linux域名解析

1.hosts:windows c盘下面 Linux: /etc/hosts 作用:实现名字解析&#xff0c;主要为本地主机名、集群节点提供快速解析。平面式结构&#xff0c;集中式数据库。 缺点:不便于查询更新 2.DNS:域名系统 作用:实现名字解析(分层性&#xff0c;层次性) FQDN:完全合格域名/全称域…...

树形结构和列表的区别

树形结构和列表在数据组织、表示方式以及应用场景等方面存在明显的区别。 首先&#xff0c;树形结构是一种非线性的数据结构&#xff0c;表现为层次的嵌套结构。每个节点可以有多个子节点&#xff0c;这些子节点又可以有自己的子节点&#xff0c;形成一个层次分明的结构。这种一…...

Go中json的解析和反解析

在解析过程中&#xff0c;反向解析不包含其中的部分参数也不会报错&#xff0c;这是需要注意的一点 31 func main() { // E: main redeclared in this block 32 type A…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...