news 2026/9/2 8:27:54

Java中int占几个字节?4个字节,记住这个数,面试直接拿捏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java中int占几个字节?4个字节,记住这个数,面试直接拿捏

数据类型:它定义了变量或表达式可以存储数据的种类。

java是一种强数据类型语言

一、基本数据类型1.byte

byte在好些编程语言里被用来表示一个含有8位也就是1字节的整数, 因为它有8位, 鉴于此byte类型的变量所能存储的值的范围是 -128至127(这种情况指的是有符号字节)或者0至255。

2.short

用来表示16位有符号整数的short, 在内存空间中固定占用2个字节, 也就是16位。

short s = 100;

3.int

int用来表示32位有符号整数, 它固定占用4个字节, 也就是32位的内存空间。

int类型的变量如果不赋初始值,默认为0。

4.long

long被用来表示64位有符号整数,它固定占用8个字节, 也就是64位的内存空间。和int类型相比较而言 long类型通常占用更多的内存空间了, 所以它能够表示更大的整数范围。

5.float

存储单精度浮点数时会用到float类型, 一般情况下, 它会占用4个字节那样大小的内存空间, 也就是32位的内存空间呢。

float a = 3.14;

6.

存储的时候会用到一种类型, 这种类型是用来存双精度浮点型的, 而且它的精度要比单精度浮点数更高一些, 一般情况下, 它会占用64位的内存空间, 也就是8字节空间才对。

double a = 3.14159;

7.

类型用于表示逻辑上的真(true)或假(false)。

8.char

char类型, 是用于在计算机编程语言里表示单个字符的基本数据类型, 在java当中此类型通常占用2个字节, 也就是16位的内存空间, 它能来表示ASCII码表或者码表中的字符。

字符类别运用字符集编码, 它属于全球通用的定字长字符集体, 所使用的字符均有着16位。

public static void main(String[] args) { char c1 = '中'; char c2 = '\u4e2d'; System.out.println(c1); System.out.println(c2); }//输出结果全为 中

当中, u4e2d处于字符集的范围之内, 字符“中”所对应的, 是16位二进制编码的值。

任何一个字符, 都能够被转化为一个整数, 这个整数的范围是从0到65535。

public static void main(String[] args) { int a = '中'; System.out.println(a); }

可以查看某个数对应着那个字符

public static void main(String[] args) { char c = 69; System.out.println(c); //输出结果为 E

转义字符

对于不方便输出的字符可以采用转义字符表示:

例如:

public static void main(String[] args) { int num = 100; String json = "{"+"\"count\":"+num+"}";// /斜杠 \反斜杠 String dataString = "[{\"id\":\"1\" ,\"name\":\"张三\"},{\"id\":\"2\" ,\"name\":\"李四\"},{\"id\":\"3\" ,\"name\":\"王五\"}]"; System.out.println(json); //输出结果为 {"count":100} }

转义字符 含义

\n 表示回车

\r 表示换行符

\\ 表示反斜杠( \ )

\' 表示单引号( ' )

\" 表示双引号( " )

请你提供具体内容以便我进行改写。当前仅有“---------------------------------------------------------------------------------------------------------------------”, 无法按要求生成改写后的句子。

内存空间分布

二、计算机对整型数据的存储方式

把整数转变为二进制, 数据类型对数据于内存里怎样存储起着决定作用, 像byte类型的大小为8bit(也就是1字节), 乃是由1bit符号位以及7bit数值位共同构成的。

1、二进制表示

在计算机内部, 是用二进制, 也就是 0 和 1 来表示所有的数据, 这里面包含整型数据。每一个二进制位也就是 bit, 它代表着 2 的幂次方的值, 这个顺序是从右到左, 或者说是从低位到高位, 并且是依次增加的。

首先, 对整数进行判断, 判断其究竟是正数, 还是负数。若是正数, 那么其符号位是0。若是负数, 那么其符号位是1。

非负整数的二进制表示获取方式为除2取余法, 该方法具体是先从整数开始, 持续不断地除以2, 伴随着进行的每次此操作, 都要记录除得的余数, 这个余数要么是0, 要么是1, 一直持续到商变为0为止。接着, 把所得到的余数数列按照逆序来进行排列, 如此便生成了该整数相应的二进制表示形式。但这里尤为需要留意、上心注意的实际情形是数据当下所处的类型状况, 不同类型的数据, 其长度是不一样的, 同时最高位呈现出来的是符号位的身份形态, 要是在按照余数逆序排列情形下加入符号位之后长度并不够, 那么就要在符号位和数值之间补零, 一直补到满足其相应长度要求完毕。

拆分法: 把这个数据进行拆分, 使其成为2^n次方相加的模式, 像正数的28啦, 它能够被拆分成16加上8加上4, 也就是2^4加上2^3加上2^2, 如此这般就可以转换为1 1100。

2、原码、反码、补码

原码, 它是符号位加上真值的绝对值, 也就是用第一位来表示符号, 其余的位用来表示值。而原码的相反数相加, 其结果并非是0。

反码, 正数的反码是其自身, 负数的反码是在原码基础上, 符号位保持不变, 其余各位进行取反操作, 反码存在加零与减零的问题。

补码, 对于正数而言, 其补码就是它自身, 对于负数来讲, 其补码是在原码条件下, 符号位维持不变, 其余各位进行取反操作之后再加 1(也就是在反码基础上 +1), 计算机内部运用补码来表示以及存储数据, 这是由于补码能够有效地处理对于正负数的加法运算。

ege: 字节型变量a被赋值为10, 这是原码形式, 这是变量a的反码形式, 这则是变量a表现出来的补码形态。

字节型变量b被赋值为负十 , 关于其原码 , 至于是反码 , 另外还有补码。

由于数据类型对数据在内存里的存储大小作了规定, 所以针对a + b的补码, 即1 0000 0000, 此时得截取数据。--->1 0000 0000(补码)。

0000在补码表示下转换为原码后结果是0 , 此过程中得到的结果等于0。

3、溢出

byte a =127; byte b =1; byte c =(byte)(a+b); System.out.println(c); //c的值为-128

进行加法运算的两个变量, 类型为byte, 此时, 运算结果的类型, 会自动提升成为int类型。

a的值是127, 此值在二进制里表示为0111, 1111。

b 的值是 1(在二进制中表示为 0000 0001)。

只要你执行a + b, 鉴于类型提升, 该操作事实上是于int类型的上下文里开展的。所以, 127 + 1的结果为128, 在int类型的二进制表示当中, 128是0 0 0100 0000。

但是, 当你试着把这个int类型的结果赋给byte类型的变量c时, 你得进行显式的类型转换, 也就是(byte)(a + b)。在这个转换进程中, Java会舍弃int值的最高位, 也就是所有除了最低的8位之外的各位, 只保留最低的8位。

鉴于, 128在int里的二进制呈现是0 0 0100 0000 , 当仅留住最低的8位之际 , 你所得到的为 1000 0000。在byte的情境里, 此二进制值展现出来的是 -128 , 究其原因在于 , 最高位(符号位)是1 , 意思是这属于一个负数, 而剩余部分的7位(1000 000)在二进制补码表示法子当中对应着之给128的绝对值 (不过鉴于其为负数 , 故而实际数值是 -128)。

所以,c 的值是 -128。

三、计算机对浮点数数据的存储方式

float: 属于单精度类型, 它由1bit、8bit、23bit以及32bit共同组成。

双精度, 1bit, 11bit, 52bit, 64bit, 默认。

小数转换为二进制:

对于小数部分, 采用乘2取整法, 也就是把小数部分乘以2, 接着取出结果的整数部分, 之后再用得到的新小数部分重复这样的过程, 一直持续到小数部分变成0或者达到所需要的精度停止。

1、浮点数精度丢失

public class Client { public static void main(String[] args) { System.out.println(1.2-1); //输出结果为 0.19999999999999996 不为0.2 } }

原因:

二进制:0.2---->0.10011.......

计算机转换0.2为二进制时, 因超过浮点数可存储的数据长度, 导致数据丢失。

避免方法:

public class Client { public static void main(String[] args) { //System.out.println(1.2-1); BigDecimal b1 = new BigDecimal(Double.toString(1.2)); //BigDecimal 精度强相关 BigDecimal b2 = new BigDecimal(Double.toString(1)); Duble value = b1.subtract(b2).doubleValue(); //b1.subtract(b2).doubleValue() b1减去b2 并将其值转换为double类型 System.out.println(value); ////输出结果为0.2 } }

四、数据类型转换

转换的方式有两种:自动类型转换和强制类型转换

1、自动类型转换(大碗装小碗)

存在整型数据, 还有实型数据, 以及字符型数据, 它们能够进行混合运算, 然而在进行运算这个行为的时候, 不同类型的这些数据必须要先转化成同一类型。

2、强制类型转换(小碗装大碗)

若程序规定必须把某一类型的数据, 从该种类型强制性地转变为另一种类型, 那么就需要通过人工进行编程来实施强制类型转换, 这种转换也被称作显式转换。

public class Client { public static void main(String[] args) { int a = 10; byte b =(byte) a; //a为int类型转换为byte类型,“大碗转小碗”,但是byte的取值范围为-128~127 10在这个范围当中不会丢失精度 System.out.println(b); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 8:27:40

INSGNSS紧组合原理与实战:伪距率+双天线高精度定位

简介:本资源是一套基于MATLAB实现的INSGNSS紧组合导航算法程序,面向计算机、电子信息工程与数学等专业的本科生及研究生,适用于课程设计、期末大作业与毕业设计等实践环节,解决高精度定位、速度与姿态联合估计问题。程序深度融合伪…

作者头像 李华
网站建设 2026/9/2 8:27:14

用 AI 做技术方案评审:输入 3 个方案,输出对比矩阵 + 推荐理由

技术选型纠结症?给 AI 列出候选方案,它给你一个结构化的对比矩阵。不是让它帮你做决定,而是让它帮你把决策信息整理清楚。 上周团队讨论"拖拽排序用哪个库",4 个人争了 30 分钟没结果。我花 2 分钟让 AI 列了个对比表&…

作者头像 李华
网站建设 2026/9/2 8:27:10

103.嵌入式 HardFault 排查实战指南:3 步快速定位问题根源

在嵌入式开发中,HardFault 是最令人头疼的问题之一。很多开发者遇到 HardFault 时第一反应是重启或怀疑芯片损坏,却忽略了它其实是 CPU 给我们的 "报警信号"。本文将结合实战经验,教你用 3 步快速排查 HardFault,让你不…

作者头像 李华
网站建设 2026/9/2 8:24:12

STM32C5开发IIS3DWB10IS(1)----SPI获取震动计数据

STM32C5开发IIS3DWB10IS.1--SPI获取震动计数据概述视频教程样品申请源码下载硬件准备参考程序所有功能串口配置通信模式管脚定义SPI通信模式速率SPI配置CS设置生成项目导入STM32CubeIDE设置工程编码添加头文件printf 重定向参考程序CMake设置头文件设置初始换管脚获取ID配置工作…

作者头像 李华
网站建设 2026/9/2 8:23:42

本地部署MiniMax H3视频生成模型:ComfyUI集成与自动化工作流指南

MiniMax H3 开源视频模型正式登陆 ComfyUI,这意味着我们可以在本地工作流中直接调用这个强大的视频生成能力了。对于关注 AI 视频生成、本地部署和自动化流程的开发者来说,这是一个值得立刻上手测试的节点。这篇文章将带你快速了解 H3 模型的核心能力&am…

作者头像 李华
网站建设 2026/9/2 8:22:37

Deployment 多版本滚动更新 + 全程验证002篇

文章目录 多轮镜像版本升级完整实操教程(4‑次迭代演练 + 全套校验) 一、第一步:初始化 v1‑1.25.3‑alpine 1.1 创建部署清单 1.2 部署资源 1.3 v1 初始化全套校验 二、第一轮升级 v1 → v2(1.25.3‑alpine 升级至 1.25.4‑alpine) 2.1 修改 yaml 文件镜像版本 2.2 下发配…

作者头像 李华