Java基本数据类型与类型转换

简介: Java基本数据类型与类型转换

一、基本数据类型

1. 概述

在Java中,所使用到的类型可以分为两大类,一类是基本数据类型,一共有8种,包含:整数,小数,字符,布尔。另外一类是引用类型,包含:字符串,数组以及各种Java类。

2. 整数类型

整数类型是一个很常用,也比较简单的类型,在计算机中以二进制的方式存储,其中有一位是符号位。

  • byte:-2^7 ~ 2^7 - 1
  • 1字节
  • 8bit
  • short:-2^15 ~ 2^15 - 1
  • 2字节
  • 16bit
  • int:-2^31 ~ 2^31 - 1
  • 4字节
  • 32bit
  • long:-2^63 ~ 2^63 - 1
  • 8字节
  • 64bit

3. 浮点类型

对于浮点(小数)类型,存储的方式与整数有所不同,其中符号位固定为1位,另外两部分为指数部分和小数部分。我们都学过科学计数法的表示方式,对于十进制,小数点前的部分的取值范围为1-9,在存储前也会整理成二进制的形式,会变成(+/-)1.b × 2^a。那么指数部分对应的就是a,尾数部分对应的就是b。

对于float,指数部分为8位,尾数部分为23位。对于double,指数部分为11位,尾数部分为52位。

  • float:约1.4 × 10^-45~3.4 × 10^38,精度为6~7位
  • 4字节
  • 32bit
  • double:约4.9 × 10^-432~1.7 × 10^308,精度为15~16位
  • 8字节
  • 64bit

4. 字符类型

对于字符类型,在进行存储时,也同样是一个整数,只不过在使用时会进行编码。说的直白一些就是,建立起了一个数字和字符之间的对应关系,只要明确字符对应的数字,或者直接将字符给出,都能够正确表示出一个字符。

  • char
  • 2字节
  • 16bit

5. 布尔类型

布尔类型是一个范围最小的数据类型,只用一个二进制位就可以来记录,0表示false-假,1表示true-真。

  • boolean:true/false
  • 1字节
  • 1bit

6. 字面值

当我们在使用一个数据类型时,总会进行一些直接赋值的操作,完整的格式如下:

  • 数据类型 变量名称 = 变量值

如:int i = 5;char c = ‘中’;double = 3.14;那么出现在等号右侧的值就被称为字面值。

  • 整数类型字面值
  • 默认十进制(int类型):136,当非常大的数需要用long存储时结尾需要添加字母L/l
  • 二进制(0b开头):0b101
  • 八进制(0开头):073
  • 十六进制(0x开头):0xAC23
  • 浮点类型字面值
  • 单精度(以F/f结尾):236.935f
  • 双精度(默认小数类型):68263.2811

二、数据类型转换

1. 自动类型转换

图中黑色的部分,可以自动进行转换,并且不会出现任何使用上的问题,只不过存储数据空间需要变大些,这也就是由低精度向高精度的转换。

其中红色箭头的部分,也可以自动进行转换,即:代码上不需要添加转换的操作,且编译不会出现问题。但是在使用时会出现精度丢失的问题,因为对于整数类型,在其所支持的存储范围内精度都是可以保证的,而对于float和double类型,精度只有相应的67和1516位,所以在使用时一定要注意!

2. 强制类型转换

那什么时候需要手动来进行类型转换呢?就是与箭头方向相反时,以及由高精度到低精度来进行赋值操作时,必须要手动进行强制转换。这意味着,你知道这其中的风险,并一定要这样做,那么无法被记录的字节将被直接截断和丢弃,最高位被识别为符号位。所以,只有当数据本身不会超出目标数据类型时,我们才会进行转换,否则有可能会得到各种奇怪的结果。

3. 表达式中的类型提升

当我们在使用表达式进行计算时,如最基本的四则运算,加减乘除。

short s1 = 40;
short s2 = 40;
short s3 = s1 + s2;// 该行编译错误,why?
short s4 = (short)(s1 + s2);// 编译通过

对于以上的情况,是因为出现了类型提升,当符号两侧出现整数时,运算结果的类型将被提升为默认的整数类型:int,而将int类型赋值给short是需要类型转换的。同样,运算符号两侧出现小数类型时,运算结果的类型将被提升为默认的浮点数类型:double,在赋值给其他变量时同样要进行类型转换。


目录
相关文章
|
2月前
|
Java
java基础(8)数据类型的分类
Java数据类型分为基本数据类型(8种)和引用数据类型。基本类型包括byte, short, int, long, float, double, boolean, char。每种类型有固定占用空间大小,如int占用4字节。字符编码如ASCII和Unicode用于将文字转换为计算机可识别的二进制形式。
73 2
|
14天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
39 4
|
12天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
30 1
|
27天前
|
存储 Java 关系型数据库
[Java]“不同族”基本数据类型间只能“强转”吗?
本文探讨了不同位二进制表示范围的计算方法,重点分析了Java中int和char类型之间的转换规则,以及float与int类型之间的转换特性。通过具体示例说明了显式和隐式转换的条件和限制。
35 0
[Java]“不同族”基本数据类型间只能“强转”吗?
|
2月前
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
59 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
1月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
50 4
|
26天前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
19 0
|
2月前
|
Java 编译器 程序员
Java自动类型转换的妙用
Java中的自动类型转换(隐式类型转换)是指编译器在无需显式指定的情况下自动将一种数据类型转换为另一种类型。这一特性简化了代码,提高了可读性,并在多态中发挥了重要作用。例如,在数学运算时,较小类型会自动转换为较大类型以避免精度损失;在面向对象编程中,子类对象可以自动转换为父类引用,增强了代码的灵活性和兼容性。此外,它还使得数组和集合的使用更加方便,整体上让编程更加优雅和高效。
|
2月前
|
存储 Java
Java内置数据类型和实例的详解
Java内置数据类型分为基本和引用两类。基本数据类型包括整型(`byte`、`short`、`int`、`long`)、浮点型(`float`、`double`)、字符型(`char`)和布尔型(`boolean`),用于存储简单的数值;引用数据类型则用于存储对象的引用,包括类(如`String`)、接口和数组。掌握这两类数据类型是Java编程的基础。以下示例展示了各种数据类型的使用方法。
|
2月前
|
Java
java基础(10)数据类型中的整数类型
Java中的整数类型包括byte、short、int和long。整数字面值默认为int类型,加L表示long类型。整数字面值可以是十进制、八进制(0开头)或十六进制(0x开头)。小容量类型(如int)可自动转换为大容量类型(如long),但大容量转小容量需强制转换,可能导致精度损失。
44 2
下一篇
无影云桌面