【Java 温故而知新系列】基础知识-02 数据基本类型

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; 会得到如下清晰的提示

【Java 温故而知新系列】基础知识-02 数据基本类型

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; 会得到如下清晰的提示

【Java 温故而知新系列】基础知识-02 数据基本类型

但是使用 += 或者 ++ 运算符会执行隐式类型转换。

```
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 类型时,会得到如下清晰的提示

【Java 温故而知新系列】基础知识-02 数据基本类型

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4777.html

(0)
LomuLomu
上一篇 2024 年 12 月 28 日 下午6:05
下一篇 2024 年 12 月 28 日

相关推荐

  • Java中List排序的3种方法

    在我们程序的编写中,有时候我们需要在 Java 程序中对 List 集合进行排序操作。比如获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进行排序,这个时候,我们就需要对 List 集合进行自定义排序操作了。 List 排序的常见方法有以下 3 种: 使用 Comparable 进行排序; 使用 Compa…

    2024 年 12 月 30 日
    67600
  • Java刷题训练第一期

    ![](https://pic.it1024doc.com/csdn/202412/db67cbccc3505a9f2578acd6ac4fd1f9.gif) ## 1. 将字符转换为ASCII码 **问题概述:** BoBo向KiKi解释了字符常量或变量在内存中以ASCII码形式存储,并提出了一个挑战:输入一个字符,输出其对应的ASCII码值。 **输入细…

    未分类 2024 年 12 月 28 日
    35700
  • Java Druid 面试题

    Druid连接池在项目中有哪些优势? 性能优越:Druid采用了高效的连接管理机制,可以快速地创建和回收数据库连接,减少了连接的创建和销毁带来的性能开销。 监控与统计:Druid提供了详细的监控信息,包括连接池的状态、SQL执行的统计信息等,这有助于性能调优和问题诊断。 SQL日志记录:Druid内置了SQL执行日志记录功能,可以记录所有SQL语句的执行情况…

    未分类 2025 年 1 月 10 日
    56200
  • 2025年MacBook苹果电脑多版本JDK安装与环境配置指南:从JDK8到JDK22的完整教程

    本指南最后更新于:2024年11月28日,包含最新版本支持。重要更新记录:- 2024年02月:新增JDK17环境配置- 2024年05月:解决Maven与JDK版本切换冲突问题- 2024年06月:针对M系列芯片用户推荐ARM版本- 2024年08月:新增JDK22支持- 2024年11月:优化内容排版与视觉效果 本教程所有操作步骤均经过实际验证,确保可行…

    2025 年 5 月 19 日
    1.7K00
  • Discord技术架构调研(IM即时通讯技术架构分析)

    一、目标 调研 discord 的整体架构,发掘可为所用的设计思想 二、调研背景 Discord作为目前比较火的一个在线聊天和语音通信平台且具有丰富的功能。另外其 “超级”群 概念号称可支持百万级群聊 以及 永久保留用户聊天记录。探究其相关技术架构与技术实现 三、产品介绍 目前广泛使用的在线聊天和语音通信平台。最初于2015年发布,旨在为游戏社区提供一个交流…

    2025 年 1 月 14 日
    50300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信