【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 DL4J基于 RNN 构建智能停车管理模型

    🧑 博主简介:CSDN博客专家 ,历代文学网 (PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学 ”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理…

    2025 年 1 月 12 日
    39900
  • 手动部署前后端分离的项目到本地

    1.准备工作 使用maven打包springboot项目为.jar文件得到springboot-0.0.1-SNAPSHOT.jar 打包vue项目 npm install -g @vue/cli安装Vue CLI 在项目根目录下,运行npm run build命令来构建项目得到一个dist文件夹 将打包好的文件通过远程仓库中转至docker虚拟机 在虚拟机…

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

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

    2024 年 12 月 28 日
    80000
  • JAVA 图形界面编程 AWT篇(1)

    前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界面(GUI)框架之一,主要用于构建桌面应用程序的图形界面。最初在 JDK 1.0 版本中作为 Java GUI 的核心库引入,旨…

    未分类 2025 年 1 月 11 日
    42900
  • java 8的下载安装

    java 8的下载安装 一、下载 官网下载地址:链接: https://www.oracle.com/java/technologies/downloads/#java8-windows 一般选择64位的 二、安装 下载完成双击安装即可,点击下一步 更改安装路径后点击下一步 出现该弹窗时直接×调,不需要单独安装jre,jdk已经自带jre了。 点击关闭完成安…

    2025 年 1 月 14 日
    52500

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信