Java 8种基本数据类型和范围

培训教学 潘老师 9个月前 (08-12) 232 ℃ (0) 扫码查看

Java中的所有值都分为两类:引用类型和原始类型。了解Java 中的所有八种基本数据类型、它们的内存大小、默认值以及最大值和最小值范围。

Java 基本类型

原始数据类型由 Java 语言预定义并由保留关键字命名。所有原始类型都可以分为两组:布尔类型和数字类型。

让我们看看下图中的每种基本数据类型。

原始类型 内存大小 默认值 范围
boolean 8位 错误的 是真是假
byte 8 位,有符号整数 0 -128 至 127(含)
char 16 位,Unicode 字符 \u0000 或代码点 0 0 至 65535
short 16 位,有符号整数 0 -32,768 至 32,767(含)
int 32 位,有符号整数 0 -2 31至 2 31 – 1
long 64 位,有符号整数 0 -2 63至 2 63 – 1
float 32 位,IEEE 754,浮点值 0.0 1.4E-45 至 3.4028235e38(6-7 位有效小数)
double 64 位,IEEE 754 0.0 4.9E-324 至 1.7976931348623157e308(15 位有效小数)

布尔类型

布尔数据类型只有两个有效值:truefalse。这两个值称为布尔值。我们可以使用布尔,如下例所示。

boolean done; // Declares a boolean variable named done
done = true;  // Assigns true to done

//or

boolean done = true;  //Declare and assign in the same line

需要注意的重要一点是,布尔变量不能转换为任何其他数据类型,反之亦然。Java 没有指定布尔数据类型的大小。它的大小由 JVM 实现决定。通常,布尔数据类型的值在内部存储在字节中。

Java 整型

整型数据类型是一种数值数据类型,其值是整数类型。Java 提供了五种整数类型。整数类型占用内存量:

byte

  • 字节数据类型是一种 8 位有符号 Java 原始整数数据类型。
  • 其范围是-128 到 127。这是Java 中可用的最小整数数据类型。
  • int与和文字不同long,没有字节文字。
  • 但是,您可以将字节范围内的任何int文字分配给字节变量。
byte b1 = 125;
byte b2 = -11;

如果将文字分配intbyte变量并且该值超出字节数据类型的范围,Java 会生成编译器错误。以下代码段将产生编译器错误:

// An error. 150 is an int literal outside -128 to 127
byte b = 150;

Java 不允许将较高范围数据类型变量的值分配给较低范围数据类型的变量,因为进行此类分配可能会损失精度。您必须使用强制转换来进行从int到byte的此类分配。

byte b = (byte) num; // Ok

short

  •  数据short类型是16 位有符号Java 原始整数数据类型。其范围是-32768 到 32767。
  • 与int和long文字不同,没有短文字。
  • 但是,您可以将短整型(-32768 到 32767)范围内的任何int文字分配给短整型变量。
short s1 = 12905;   // ok

short s2 = -11890;  // ok

字节变量的值总是可以分配给short变量,因为字节数据类型的范围落在short数据类型的范围内。从int或long变量向short变量赋值的所有其他规则与byte变量的分配规则相同。

char

  • char 数据类型是16 位无符号Java 原始数据类型。
  • 它代表一个Unicode 字符
  • 请注意,char是无符号数据类型。因此,char变量不能具有负值。
  • char 数据类型的范围是0 到 65535,这与 Unicode 集的范围相同。
  • 字符文字表示 char 数据类型的值。
char c1 = 'A';
char c2 = 'L';
char c3 = '5';
char c4 = '/';

字符文字也可以表示为字符转义序列。字符转义序列以反斜杠开头,后跟一个字符,并且两者都用单引号引起来。

八种预定义的字符转义序列,如下所示:

字符转义序列 描述
‘\n’ 换行
‘\r’ 回车
‘\F’ 换页
‘\b’ 一个退格键
‘\t’ 一个选项卡
‘\\’ 反斜杠
‘\” 双引号
‘\’ 单引号

这些只是 Java 中的八个字符转义序列。您无法定义自定义字符转义序列。

字符文字还可以表示为以下形式的 Unicode 转义序列'\uxxxx',这里,\u(紧跟小写 u 的反斜杠)表示 Unicode 转义序列的开头,xxxx正好表示四个十六进制数字。

char c1 = 'A';
char c2 = '\u0041';  // Same as c2 = 'A'

int

  • 数据int类型是32 位有符号Java 原始数据类型。该数据类型的变量int占用32 位内存
  • 其有效范围为-2,147,483,648至2,147,483,647(-2 31至 2 31 – 1)。
  • 此范围内的所有整数都称为整数文字(或整数常量)。例如,10、-200、0、30、19等都是int的整数字面量。

可以将整数文字分配给int变量,例如counter,如下所示:

int counter = 21;

Java 有一个名为 的包装类Integer,它定义了两个常量来表示 int 数据类型的最大值和最小值,Integer.MAX_VALUE以及Integer.MIN_VALUE。它是 int 值的对象表示。

int max = Integer.MAX_VALUE; // Assigns maximum int value to max
int min = Integer.MIN_VALUE; // Assigns minimum int value to min

long

  • long数据类型是一种64 位有符号Java 原始数据类型
  • 当整数的计算结果可能超出int数据类型的范围时使用它。
  • 其范围是 -2 63到 2 63 – 1。
  • long 范围内的所有整数称为long 类型的整数字面量

long 类型的整数文字始终以“L”(或小写“l”)结尾。

long num1 = 0L;
long num2 = 401L;
long mum3 = -3556L;

即使long变量中存储的值完全在数据类型的范围内int,如果没有显式类型转换,也不允许从 long 到 int 赋值,如下例所示:

int num1 = 5;
long num2 = 25L;

// A compile-time error. Even if num2's value 25 which is within the range of int.
num1 = num2;

如果要将long变量的值赋给int变量,则必须在代码中显式提及这一事实,以便 Java 确保您意识到可能存在数据溢出。您可以使用 Java 中的“强制转换”来完成此操作,如下所示:

long num1 = (int) num2; // Now it is fine because of the "(int)" cast

通过编写(int)num2,您指示 Java 将存储的值视为num2int。在运行时,Java 将仅使用 的 32 个最低有效位num2,并将存储在这 32 位中的值分配给num1。如果num2有一个值超出了 int 数据类型的范围,你将不会得到相同的值,num1并且会导致数据丢失

Java有一个类Long(注意Long中的大写L),它定义了两个常量来表示long数据类型的最大值和最小值,Long.MAX_VALUE以及Long.MIN_VALUE

long max = Long.MAX_VALUE;
long min = Long.MIN_VALUE;

浮点类型

包含小数部分的浮点数称为实数,例如 3.25、0.49、-9.19 等。

数字如何存储在内存中?

当实数转换为其二进制表示形式时,计算机还必须存储该数字中小数点的位置。有两种策略可以在计算机内存中存储实数。

  1. 定点”数字格式– 仅存储数字的二进制表示形式,并假设该点之前和之后始终有固定数量的数字。一个点在数字的十进制表示中称为小数点,在二进制表示中称为二进制点。点的位置始终固定为数字的表示类型称为“定点”数字格式。
  2. 浮点”数字格式——存储实数的二进制表示形式以及实数中的点的位置。由于在这种实数表示中,点前后的位数可能不同,因此我们说该点可以浮动。这种表示形式称为“浮点”格式。

与定点表示相比,浮点表示速度较慢且精度较低。然而,与定点表示相比,浮点表示可以使用相同的计算机内存处理更大范围的数字。

Java 支持“浮点”数字格式。

Java 有两种浮点数值数据类型:

  • float
  • double

float

float 数据类型使用32 位以IEEE 754 标准格式存储浮点数(单精度浮点数)。它可以表示小至 1.4 x 10 -45、大至 3.4 x 10 38(大约)的实数。该范围仅包括幅度。它可以是积极的,也可以是消极的。

所有以“f”或“F”结尾的实数称为浮点文字

float f1 = 8F;
float f2 = 8.F;
float f3 = 8.0F;

float 数据类型定义两个无穷大:正无穷大和负无穷大。例如,除以的结果2.5F0.0F浮点正无穷大,而除以的结果2.5F-0.0F浮点负无穷大。

浮点上的某些操作的结果未定义。这些结果由浮点数据类型NaN(非数字)的值表示。

Float类定义了三个常量,分别表示浮点数据类型的正无穷大、负无穷大和 NaN。还有两个常量,它们表示可以存储在浮点变量中的最大和最小(大于零)浮点值。

Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY
Float.NaN 
Float.MAX_VALUE
Float.MIN_VALUE

 

请注意,所有整型(int、long、byte、short 和 char)的值都可以分配给 float 数据类型的变量,而无需使用显式强制转换,但是 float 值在分配给之前必须进行强制转换任何整型数据类型 int、long、byte、short 或 char 的变量。

double

双精度数据类型使用64 位以“IEEE 754 标准格式”存储浮点数。根据 IEEE 754 标准以 64 位表示的浮点数也称为双精度浮点数

所有实数都称为双精度数。双文字可以选择以“d”或“D”结尾,例如 19.27d。但是,后缀 d 或 D 在双精度文字中是可选的。也就是说,19.27 和 19.27d 都表示相同的双精度字面值。

double d1 = 8D
double d2 = 8.;
double d3 = 8.0;
double d4 = 8.D;

与浮点数据类型类似,双精度数据类型定义最大值、最小值、两个无穷大和一个 NaN 值。

Double.POSITIVE_INFINITY 
Double.NEGATIVE_INFINITY
Double.NaN
Double.MAX_VALUE
Double.MIN_VALUE 

结论

在这篇文章中,我们详细了解了原始类型及其范围。一些科学或密码应用程序要求我们存储和操作非常大(或非常小的)数字,并且重视准确性而不是性能。如果我们需要比原始类型提供的更大的数字,我们可以使用java.Math 包中的BigInteger、BigDecimal  。这些类别提供近乎无限的大小或精度。

教程 Java基础教程

文章目录 前言  第1章 Java语言基础 第2章 流程控制语句 第3章 面向对象编程 第4章 Java 字符 […]


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/7991.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】