2.3 数据的类型

变量都有哪些类型

假设编写程序让计算机完成这样的操作:一个学生的年龄是 22 岁,新年的钟声敲响之后,他的年龄就应该增加一岁,即为 22+1。计算机如何执行这样的操作呢?首先,计算机要向内存申请一块空间,存放 22 这个数字,再申请一块空间,存放 1 这个数字,然后让计算机求这两个数字的和,存放到内存中。

现在是用整数存储学生的年龄,申请了一块内存空间,如果要存储学生的姓名,或者存储学生的成绩(例如 78.5),也是申请同样大小的一块内存空间吗?这样的内存空间能存下需要存储的数据吗?答案是否定的。

根据能对数据进行的操作以及存储数据所需内存大小的不同,编程语言都会把数据分成不同的类型。Java 中数据类型分为两大类,即基本数据类型和引用数据类型,如下图所示。其中引用数据类型又分为类、接口和数组(在后续章节会详细介绍)。
在这里插入图片描述
基本数据类型又分为 3 类 8 种,3 类分别是数值型、字符型和布尔型,数值型又可细分。下表列出了不同的基本数据类型所占的字节数、位数和使用说明。
在这里插入图片描述

四种整型各有什么特点

Java 的整型又细分为 byte、short、int、long 四种类型,它们都有固定的取值范围而不受具体操作系统的影响,以保证 Java 程序的可移植性。
在这里插入图片描述
以 byte 为例说明取值范围的推理过程:

最大值:高位为 0 表示正数,其余 7 个位为 1,十进制为 127
最小值:高位为 1 表示负数,其余 7 个位为 0,十进制为-128

在这里插入图片描述
在这里插入图片描述

进制转换

Java 整型字面值常量有以下 4 种表示形式。

  1. 十进制整数,例如 12,-127,0。
  2. 八进制整数,以 0 开头,例如 014(对应于十进制的 12)。
  3. 十六进制整数,以 0x 或 0X 开头,例如 0XC(对应于十进制的 12),0XA5(对应于十进制的 165)。
  4. 自 JDK7 以后,还可以用 0b 或 0B 开头,表示二进制整数,例如 0b11(对应于十进制的 3)。

其他常见进制,虽然不能直接表示,但仍然可以通过 Java 中的一些 API 转换后得到。关于 API 的相关知识,大家也会随着学习的深入逐渐了解。

自 JDK7 以后,为了提高数字的可读性,还可以使用下划线(_)对数字分组,但要注意下划线不能出现在数字的首部或尾部,也不能出现在 0b 和 0x 左右、小数点左右、L 和 F 符号前。例如,在定义变量时,double d = 123_456.7_8 和 double d = 123456.78 是等价的。

两种浮点型各有什么特点

在计算机系统的发展过程中,曾经提出过多种表示实数的方法,但是到目前为止使用最广泛的是浮点表示法。相对于定点数而言,浮点数利用指数使小数点的位置可以根据需要而上下浮动,从而可以灵活地表达更大范围的实数。

Java 浮点类型字面值常量有以下两种表示形式。

十进制形式,例如 3.14,314.0,.314。
科学记数法形式,例如 3.14e2,3.14E2,100E-2。

Java 语言浮点型字面值常量默认为 double 型,表示 float 型字面值常量需要在字面值常量后面加上 f 或 F,例如:

float floatNum = 3.14F;

不同于整型,通过简单的推算,程序员就可以知道这个类型的取值范围。对于 float 和 double,要想推算出来,需要理解浮点型的存储原理,且计算起来比较复杂。
在这里插入图片描述

字符型有什么特点

字符型(char 型)数据用来表示通常意义上的字符。(必须使用单引号才能赋值正确,不加单引号的数字会赋值ascii码值,不加单引号的其他字符会报错,但数字在数据转换时没有问题
例:

char a = 1;
int b = a;
System.out.println(a);
System.out.println(b);

结果:


1

在这里插入图片描述

字符字面值常量为用单引号括起来的单个字符,因为 Java 使用 Unicode 编码,一个 Unicode 编码占 2 个字节,一个汉字也是占 2 个字节,所以 Java 中字符型变量可以存放一个汉字,例如:

char eChar = 'q'; char cChar = '桥';

说明:在编写代码时,所有的标点符号都是半角符号。例如,程序中的单引号是 ',而不是 ’;程序中的分号是 ;,而不是 ;。

Java 字符型字面值常量有以下 3 种表示形式。

  1. 用英文单引号括起来的单个字符,例如’a’、‘汉’。
  2. 用英文单引号括起来的十六进制代码值来表示单个字符,其格式为’\uXXXX’,其中 u 是约定的前缀(u 是 Unicode 的第一个字母),而后面的 XXXX 位是 4 位十六进制数,是该字符在 Unicode 字符集中的序号,例如 ‘\u0061’ 等价于 ‘a’。
  3. 某些特殊的字符可以采用转义符’‘来转换,转义符可以将其后面的字符转变为其他的含义,例如 ‘\t’ 代表制表符,’\n’ 代表换行符,‘\r’ 代表回车符等。

布尔型

Java 中的布尔型(boolean)可以表示真或假,只允许取值 true 或 false(不可以用 0 或非 0 的整数替代 true 和 false,这点和 C 语言不同),占一个字节,例如:

boolean flag = true;

boolean 类型适于逻辑运算,一般用于程序流程控制,在后续章节会详细介绍。

字符串型

首先强调,在 Java 对数据类型的分类中,字符串不属于基本数据类型。对于字符串类型的具体使用,我们也将会在第 5 章进行详尽的讲解,此处仅作概述。

字符串变量通过 String 来声明,字符串字面值常量则需要用半角双引号将内容包裹。字符串字面值常量的长度,可以是 0,也可以是任意数量的,例如。

String str1 = ""; String str2 = "Hello World" ;

在前面的若干输出语句中我们已经见过这样的形式,在学习 Java 的前期我们会经常在输出语句中使用字符串和字符串拼接(+ 号用于字符串拼接)以帮助观察程序运行过程。

在这里插入图片描述

当赋值为空串时,指向地有数据但数据为空
当赋值为null时,不指向任何内容或数据

**

1. 基本数据类型创建并赋值时直接将数据存放在栈空间,该对象指向栈空间数据
2. 引用数据类型赋值时是在堆空间存放数据,栈空间存放引用数据类型对象,该对象指向堆空间数据
3. 当引用数据类型赋值为null时,其创建在栈空间且不指向任何数据
**

在这里插入图片描述

基本数据类型之间转换的规则

编写 Java 程序时,经常涉及数据类型转换,我们可以将其分为 3 类:基本数据类型转换、字符串与其他数据类型转换、其他实用数据类型转换。此处介绍基本数据类型转换,其中 boolean 类型不可以和其他数据类型互相转换。整型、字符型、浮点型的数据在混合运算中可相互转换并遵循以下原则。

容量小的类型可自动转换成容量大的数据类型,如下图所示。
在这里插入图片描述

1. byte、short、char 参与运算时会被自动转换为 int 类型。

2. 容量大的数据类型转换成容量小的数据类型时,需要加上强制转换符,但可能造成精度降低或溢出,使用时需要格外注意。

4. 有多种类型的数据混合运算时,系统首先自动地将参与运算的变量或字面值常量转换成容量最大的数据类型,然后再进行计算。
在这里插入图片描述

且浮点类型不能做精确运算

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值