当前位置: 首页 > 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…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...