【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 日

相关推荐

  • Python Cookbook(第3版)中文版-PDF免费下载

    Python Cookbook(第3版)中文版-PDF免费下载 适读人群 :Python程序开发人员、编程爱好者、在校大学生 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:https://item.jd.com/13897579.html Python图书升级版本,Python编程从入门到实践,涵盖Python3.3,包含大量实用…

    2024 年 12 月 30 日
    38000
  • PostgreSQL 初始化配置设置

    title: PostgreSQL 初始化配置设置date: 2024/12/27updated: 2024/12/27author: cmdragon excerpt:PostgreSQL是一款广泛应用于企业级应用、数据仓库以及Web应用程序的强大数据库管理系统。在完成数据库的安装后,进行合理而有效的初始配置是确保数据库性能和安全性的关键步骤。Postgr…

    2025 年 1 月 6 日
    39200
  • IntelliJ IDEA 2024激活破解详细教程(IDEA永久激活码)

    IntelliJ IDEA 是一款广受欢迎的 Java 集成开发环境,以其智能代码助手、代码自动提示和强大的重构功能闻名。然而,对于一些开发者来说,其高昂的订阅费用可能是个不小的负担。本文将介绍一种通过脚本激活 IDEA 的方法,帮助大家免费使用这款强大的开发工具。 一、准备工作 1. 下载并安装最新版本的 IDEA 首先,前往 JetBrains 官网下载…

    未分类 2024 年 6 月 23 日
    2.1K00
  • python SQLAlchemy ORM——从零开始学习 01 安装库

    01基础库 1-1安装 依赖库:sqlalchemy “`python pip install sqlalchemy #直接安装即可 “` 1-2导入使用 这里讲解思路【个人的理解】,具体写其实就是这个框架: 导入必要的接口【有创建engine以及declarative_base】 通过create_engine接口创建engine,根据翻译可以翻译成引…

    2025 年 1 月 12 日
    34900
  • IDEA文件出现java file outside of source root

    目录 1.问题: 2.解决方法: 3.扩展:父子工程引入Module后报错 参考文献: 1.问题: 有时候打开Module,发现各级文件夹下的类不能正常使用,类前的符号(小咖啡杯)是红色的(红色表示这个类是不可编译文件)。类前红色咖啡杯符号如图1所示: 图1 类前红色咖啡杯符号 打开文件后显示文字“Java file is located outside o…

    2024 年 12 月 28 日
    69300

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信