用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
【Java 温故而知新系列】基础知识-02 数据类型 ...
【Java 温故而知新系列】基础知识-02 数据类型
拉不拉稀肚拉稀
论坛元老
|
2024-12-27 08:35:23
|
显示全部楼层
|
阅读模式
楼主
主题
1676
|
帖子
1676
|
积分
5030
1、Java基本数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的详细的数据类型,在内存中分配了差别巨细的内存空间。
基本数据类型
数值型:整数类型(byte,short,int,long) ;浮点类型(float,double)
字符型:char
布尔型:boolean
类型
类型名称
关键字
占用内存
取值范围
默认值
整型
字节型
byte
1 Byte(字节)
-128(2^7)
~ 127(2^7-1)
0
短整型
short
2 Byte(字节)
-32768(2^15)
~ 32767(2^15-1)
0
整型
int
4 Byte(字节)
-2147483648(2^31)
~ 2147483647(2^31-1)
0
长整型
long
8 Byte(字节)
-2^63 ~2^63-1
0L
浮点型
单精度浮点型
float
4 Byte(字节)
-3.4028235 × 10^38
~ 3.4028235×10^38
0.0F
双精度浮点型
double
8 Byte(字节)
−1.7976931348623157×10^308
~ 1.7976931348623157×10^308
0.0D
字符型
字符型
char
2 Byte(字节)
表现一个字符,如'a'、'A'
'\u0000'
布尔型
布尔型
boolean
1 Byte(字节)
true、false
false
很长一段时间里对整型数据的取值范围我自己一直几个疑问 ,以byte 举例:byte的取值范围是 -128 (2^7)~ 127(2^7-1):
1、那么byte的内存是 1 字节刚好是8位,它的取值范围为什么是2^7而不是2^8呢 ???
2、最小值是-2^7,为什么最大值是2^7-1而不是 2^7呢 ???
有没有跟我一样的小伙伴 ? O(∩_∩)O哈哈~ 咋们接着往下看,看我细细道来!!!
疑问1:
因为 byte 是有符号整型,需要表现正数、负数以及零,以是需要用一位来表现符号,最高位被用作符号位,以是最终表现数字范围只能是2^7 而不是2^8。
如果最高位(最左边的一位)是0,则该数为正数或零。
如果最高位是1,则该数为负数。
个人觉得第一个疑问还是比较好理解的,有符号位嘛,占一位以是少了一位。
疑问2:
最大值:最高位被用作符号位,因此当这7个位全部为1且符号位为0时得到的就是最大正值(二进制: 01111111),而二进制 01111111 转换为十进制的值就是127,以是byte最大值刚好就是 2^7-1;
最小值:对于最小的负数 -128,这是因为在二进制补码中,全部8位都是1(即 11111111)表现的是 -1。而当只有最高位为1,别的位都为0(即 10000000)时,根据二进制补码规则,这个值代表的是 -2^7 = -128。
到此我的2个疑问就都解开了, 不知道有没有解开小伙伴你们的疑问呢?反思一下有这个疑问的根本原因是没搞明确二进制的补码规则
。
接待各人举行探究哈。
下面是网上搜罗的补码规则以及设计出补码的原因,仅供我自己和各人参考:
二进制补码规则:
1. 正数的补码
对于正数,其补码就是它自身的二进制表现。例如,十进制数 5 的8位二进制表现为 00000101,这也是它的补码表现。
2. 负数的补码
要获得一个负数的补码表现,可以按照以下步调操作:
找到对应的正数:先确定该负数绝对值的二进制表现。
取反:将上述二进制数中的每一位取反(即将全部的 0 变成 1,全部的 1 变成 0),这一步也称为一的补码(One's Complement)。
加1:在取反后的效果上加 1,得到的就是该负数的二进制补码表现。
3. 补码的优点
简化了加法器的设计:无论是正数还是负数,都可以用同一个硬件电路来举行加法运算。
消除了正零和负零的区别:在补码系统中,只有唯一的一个零(全部位均为 0),而不存在两个差别的零。
自动处理溢出:当发生溢出时,只要忽略最左边的进位位,效果仍然是正确的。
2、运算
float 与 double
Java 不能隐式执行向下转型,因为这会使得精度降低。
1.1 字面量属于 double 类型,不能直接将 1.1 直接赋值给 float 变量,因为这是向下转型。
// float f = 1.1;
复制代码
在代码中输入 float f = 1.1; 会得到如下清晰的提示
1.1f 字面量才是 float 类型。
1 float f = 1.1f;
复制代码
隐式类型转换
因为字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型向下转型为 short 类型。对于 short s = 1; s = s + 1;由于 1 是 int 类型,因此 s+1 运算效果也是 int型,需要逼迫转换类型才能赋值给 short 型
short s = 1;
// s = s + 1;
复制代码
在代码中输入s = s + 1; 会得到如下清晰的提示
但是使用 += 或者 ++ 运算符会执行隐式类型转换。
1 s += 1;
2 s++;
复制代码
上面的语句相称于将 s + 1 的计算效果举行了向下转型:
1 s = (short) (s + 1);
复制代码
switch
在 Java 5 从前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前全部的版 本中都是不可以的
1 String temp = "a";
2 switch (temp) {
3 case "a":
4 System.out.println("aaa");
5 break;
6 case "b":
7 System.out.println("bbb");
8 break;
9 }
复制代码
switch 不支持 long、float、double,是因为 switch 的设计初衷是对那些只有少数几个值的类型举行等值判断,如果值过于复杂,那么还是用 if 比较合适。
当switch(expr) 中的expr 是long 类型时,会得到如下清晰的提示
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
拉不拉稀肚拉稀
论坛元老
这个人很懒什么都没写!
楼主热帖
c语言学习4
【Atlas 800 训练服务器(型号:9000) ...
Docker 基础 - 3
IOS OpenGL ES GPUImage 黑白色调模糊 ...
WinUI3 FFmpeg.autogen解析视频帧,使 ...
【主流技术】ElasticSearch 在 Spring ...
第四次打靶
【最新最详细】SQL Server 2019 安装教 ...
制造型企业的数字化转型离不开 MES 系 ...
SQLI-LABS(Less-11、12)
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表