欢迎光临散文网 会员登陆 & 注册

Java零基础快速入门|数据类型(上)

2021-02-01 14:40 作者:动力节点小王本王  | 我要投稿


本文章主要内容:

数据类型概述

字符编码

字符型详解

整数型详解

学习目标

带大家理解数据类型的作用,八种基本数据类型各是什么,常见数据类型的取值范围,怎么使用它们声明变量,各数据类型使用时的注意事项,另外要知道在实际开发中怎么选择合适的数据类型,还有这八种基本数据类型之间的相互转换。

知识框架

数据类型概述

在上一篇文章中我们学习了变量,我们知道任何一个变量都包括三要素,分别是:数据类型、变量名、值。其中数据类型尤为重要,目前我们已经接触过一种数据类型,那就是表示整数型 int。接下来我们一起来学习一下其他的数据类型。

在学习其他数据类型之前我们先来思考一个问题,数据类型在程序中起到什么作用呢?

际上是这样的,软件的存在主要是进行数据的处理,现实生活中的数据有很多,所以编程语言 对其进行了分门别类,然后就产生了数据类型,不同数据类型的数据会给其分配不同大小的空 间进行存储。也就是说,数据类型作用就是决定程序运行阶段给该变量分配多大的内存空间。这就是数据类型的主要作用。

那么java中的数据类型都包括哪些呢?实际上Java中的数据类型就包括两大类:

  • 基本数据类型

  • 引用数据类型

 其中,基本数据类型又包括 4 8 种:

  • 1 类:整数型(不带小数的数字):byte,short,int,long

  • 2 类:浮点型(带小数的数字):float,double

  • 3 类:字符型(文字,单个字符):char

  • 4 类:布尔型(真和假):boolean

大家可以看到,在以上的基本数据类型范畴中未发现字符串类型带双引号的是字符串), 所以,在这里我要告诉大家,Java 中的字符串属于引用数据类型,不属于基本数据类型的范畴。

通过以上的学习,我们知道八种基本数据类型指的是:byteshortintlongfloatdoublebooleanchar

接下来我们来看一下八种基本数据类型的详细信息,请看下表:

通过上表我们可以看出八种基本数据类型中

byte 占用 1 个字节

short 占用 2 个字节

int 占用 4 个字节

long 占用 8 个字节

float 占用 4 个字节

double 占用 8 个字节

boolean 占用个字节

char 占用 2 个字节

那么字节是什么呢,这个大家要知道 1 个字节是8 个比特位, 那么又有同学问了,1 个比特位是什么,1 个比特位就是一个 1 0,或者说 1 个比特位就是一个二进制位。也就是说1 个字节是由8 1 0 组成的二进制数字串。

接下来我们先普及一下计算机基础知识吧,实际上计算机在任何情况下都只能识别二进制,什么是二进制呢?

计算机毕竟是一台通电的机器,电流只有正极、负极,所以只能表示两种情况,也就是 1 0。对于一串由 1 0 组成的数字来说就是二进制,所谓的二进制就是满1,请看以下十进制和二进制的对照表:

其实十进制和二进制之间是存在转换规则的,如下所示:

  • 十进制转换成二进制:比方说十进制数 65 转换成二进制,我们可以使用短除法,65 2 整除商32 余数为1,把 1 写在旁边,接着 32 2 整除商 16 余数为 0,把 0 写在旁边,用16 整除 2 0 余数为 0,把0 写在旁边,这样进行下去直至商为0 时为止。然后把余数逆序排列就得到了 65 的二进制。如下图所示:

十进制转换成二进制
  • 二进制转换成十进制:比方说二进制代码为 1000001 的十进制数是多少呢?可以采用按权相加的方法,对于二进制代码 1000001 首先从右边第一位起对应 2 的零次方,第二位对应 2 1 次方,以此类推,把相应的数位与权值相乘得到的积相加即可,即 1×20+0×21+0×22+0×23+0×24+0×25+1×26=65

好了,计算机二进制的小插曲我们就先说到这里,言归正传,接下来我们继续学习八种基本数据类型。

当我们对二进制有一定的了解之后,来看一下 byte  类型的取值范围,为什么最大值只能取127 呢:

首先数字是有正负之分,在二进制位当中最左边的二进制位是符号位,0 表示正数, 1 表示负数,byte 属于字节型,占用空间大小是 1 个字节,1 个字节是 8 bit 位,所以 byte 类型最大值是左边一个 0 右边七个 101111111,这个二进制位实际上是 27-1,也就是 127byte 类型最小值是-128,那么,这也说明 1 个字节最多可以表示 256 种不同的情况-128 127,中间有一个 0,共 256 个不同的数字)。

接下来我再给大家普及一下计算机的容量单位换算:

1byte = 8bit1 个字节是 8 个比特位)

1KB = 1024byte 1MB = 1024KB

1GB = 1024MB

1TB  = 1024GB

到这里,我相信各位会去想,我自己的硬盘是多大空间,可以存储多少个二进制位,你可以算算哦!

对于以上的八种基本数据类型,其中 byteshortintlong 属于整数型,代表现实世界中的整数,只不过容量大小不同,细分的话,byte 叫做字节型,short 叫做短整型,int 叫做整型, long 叫做长整型,在实际的开发中,为了兼顾到开发效率,选择数据类型的时候也不会太斤斤计较,这四种类型中int 最为常用。

通过本小节的学习,大家需要知道八种基本数据类型分别包括哪些,每种类型占用几个字节,取值范围是怎样的。对于二进制和十进制的转换,大家作为一个了解即可。

 

字符编码

对于以上的八种基本数据类型来说,其中七种类型 byte,short,int,long,float,double,boolean 计算机表示起来是很容易的,因为这七种类型底层直接就是数字,十进制的数字和二进制之间有固定的转换规则,所以计算机可直接表示和处理。

但是大家别忘了,除了以上的七种数据类型之外,还有一种类型叫做字符型 char,这个对于计算机来说表示起来就不是那么容易了,因为字符毕竟是现实世界当中的文字,而文字每个国家又是不同的,计算机是如何表示文字的呢?

实际上,起初的时候计算机只支持数字,因为计算机最初就是为了科学计算,随着计算机的发展,为了让计算机起到更大的作用,因此我们需要让计算机支持现实世界当中的文字,一些标准制定的协会就制定了字符编码字符集,字符编码其实就是一张对照表,在这个对照表上描述了某个文字与二进制之间的对应关系。

最初的时候美国标准协会制定了ASCII 码,ASCIIAmerican Standard Code for Information Interchange:美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的信息交换标准,并等同于国际标准ISO/IEC 646。

ASCII 码采用 1 个字节编码,1 个字节可以表示256 种不同的形式前面说过了,对于英文来说这个足够了,因为英文单词就是由 26个英文字母拼凑而成,大小写全部才52个,再加上数字和标点符号也不会超过256个。但 ASCII 码对于中文来说那就不够了,因为汉字不止256个。

常见的 ASCII 码需要大家能够记住几个,在 ASCII 码中规定'a'对应 97'b'对应 98,以此类推,'A'对应 65'B'对应 66,以此类推,'0'字符对应48'1'字符对应 49,以此类推,这些常见的编码还是需要大家记住的。

在字符编码当中,有这样两个常见的术语需要大家了解一下:编码和解码,它们都是什么, 我们拿字符'a'来解释一下:'a'9797 对应的二进制是01100001,那么从'a'到二进制01100001 的转换过程称为编码,从二进制 01100001   'a'的转换过程称为解码。大家一定要注意:编码和解码要采用同一种字符编码方式要采用同一个对照表),不然会出现乱码。这也是乱码出 现的本质原因。

随着计算机的不断发展,为了让计算机支持更多国家的语言,国际标准组织又制定了ISO-8859-1 字符集,又被称为latin-1,向上兼容 ASCII 码,仍不支持中文,主要支持西欧语言。再后来,计算机慢慢的开始支持简体中文、繁体中文、日本语、朝鲜语等,其中支持简体中文 的字符集包括:GB2312 GBK GB18030,它们的容量大小不同,其中GB2312 < GBK < GB18030。支持繁体中文的是大五码 Big5 等。后来,在上世纪90 年代初,国际组织制定了一种字符编码方式,叫做 Unicode  编码,这种编码方式统一了全球所有国家的文字,具体的实现包括:UTF-8UTF-16UTF-32 等。

Java 为了国际化,为了支持所有国家的语言,所以Java 采用的编码方式为Unicode 编码。例如字符''对应的 Unicode 码是'\u4e2d'。在实际开发中几乎所有的团队都会使用 Unicode  码方式,因为这种方式更通用,兼容性更好。

通过本小节的学习,大家需要理解字符编码是什么,有什么作用,常见的 ASCII 码要知道一些,另外要理解什么是编码,什么是解码,要知道编码和解码采用的字符编码方式不同时会出现乱码,还要知道国际通用的编码方式为 ISO-8859-1 ,支持简体中文的编码方式包括GB2312GBKGB18030,而 Java 采用 unicode 编码,目前在实际的开发中大部分团队都会选择UTF-8 的编码方式。

 

数据类型详解

以上我们对数据类型有初步的了解之后,我们来详细的学习一下每一种数据类型。


字符型详解

字符型char Java 语言中占用 2 个字节,char 类型的字面量必须使用半角的单引号括起来,取值范围为[0-65535]char short 都占用 2 个字节,但是char 可以取到更大的正整数, 因为char 类型没有负数。

Java 语言中的char 类型变量可以容纳一个汉字。请看以下程序:

我们对以上的程序编译并运行,请看下图结果:

CharTest01 运行结果

我们可以看到Java 中的char 类型确实可以存储一个汉字。我们再来看以下程序,假设字符我们采用双引号括起来会怎样:

我们对以上的程序进行编译,请看下图编译结果:

CharTest01.java 程序的编译

我们看到编译器报错了,并且提示的错误信息是“不兼容的类型”,这是因为双引号括起来不是char 类型,而是 String 类型,其实 String 类型就是Java 中的字符串类型,但大家要知道字符串不属于基本数据类型,而是引用数据类型。所以类型不兼容。接下来我们来测试一下两个或多个字符是否可以使用单引号括起来,请看以下代码:

我们对以上的程序进行编译,请看下图编译结果:

CharTest01.java 程序编译结果

我们可以看出,编译器报错了,错误信息是“未结束的字符文字”,这是因为Java 中有规定,字符型只能是单个字符,当编译器检测到'ab'的时候,左边以单引号开始,继续检测到a  字符,然后编译器会继续检查下一个字符是否为另一半单引号,结果不是,而是b,所以编译器报错了。这也说明了Java 中的字符只能是单个字符,不能是多个字符。

接下来,我们再来看一看关于转义字符,转义字符指用一些普通的字符组合代表一些特殊 的字符,由于组合用的字符改变了原意,称为转义字符。

Java 中的转义字符以 \  开始,常见的转义字符有:\t\n\u\\\'\",其中:

  • \t 代表制表符

  • \n 是换行符

  • \\表示一个普通的\字符

  • \'表示一个普通的'

  • \"表示一个普通的"

请看以下代码:

们对以上的程序进行编译并运行,请看下图结果:

CharTest02 运行结果

对于以上程序,表面看起来'\t'是由两个字符构成,按说应该编译报错,因为它毕竟是两个 字符组成的字符串,可是最终的结果编译通过了,并且正常运行了,这说明了'\t'表示1 个字符, 所以\具有转义功能,根据以上输出结果可以看出\t  是制表符(abc def 之间的空白就是制表符)

接下来我们来看一看其它的转义字符。请看以下程序:

我们对以上的程序进行编译并运行,请看下图运行结果:

CharTest03 程序运行结果

通过以上代码的测试,hello world 之间换行了,所以\n 代表一个换行符。

对于以上代码的第 4 '\'' 来说,这里的 \ 是不能去掉的,如果去掉之后代码就变成了'''那么此时编译器会报错,因为单引号'Java  中有特殊含义,在这个'''代码当中第一个单引号' 会主动和第二个单引号'配对,此时最后的单引号'就是多余的了,不符合Java  的语法,所以会导致编译错误,如果这个时候在第二个单引号'前面添加 \  进行转义,代码是'\'',那么此时第二个单引号 \'  就是一个不具备特殊含义的普通单引号字符,这个时候第一个单引号'会和最后一个单引号'配对。编译和运行就正常了。

对于以上代码第 6 行来说和第 4 行的原理是相同的,代码 \"  表示普通的双引号字符。对于第 5 行代码来说,代码 \\  联合起来表示一个普通的 \  字符,在 Java 1 \  字符

不是普通的 \  字符,具有特殊的作用就是转义,我们想让其变成一个普通的 \  字符需要使用

两个 \ 来表示,代码 \\ 中,第一个 \ 具有转义功能,第一个 \  将第二个 \  转换成普通的 \  符,以此类推,如果代码是 \\\\ 这样,则表示结果是 \\

对于第 7 行代码来说,如果代码修改为'u4e2d'必然报错,因为 u4e2d 在这个时候是一个普通的字符串,字符串是不能使用单引号括起来的,如果在 u 字符前添加转义字符 \ 则表示的含义就不同了,\u 转义之后表示后面的 4e2d 是一个unicode 码,根据 unicode 字符集可以查询到汉字''unicode 码就是 4e2d,所以最终输出结果是汉字''

综上所述,\n 表示换行符,\'表示普通的单引号字符,\\表示一个普通的\字符,\"表示一个普通的双引号字符,\u 后面的十六进制是文字的unicode 编码。

通过本小节的学习,我们需要掌握的是,在 Java 语言中,字符 char 类型的数据只能使用单引号括起来,并且在Java 语言中char 类型完全可以存储一个汉字,另外还需要知道在Java 语言中 \ 具有转义功能,常见的转义字符要知道代表什么含义。

最后再给大家留两行代码,思考一下它的运行结果,在后面我们再详细讲解该内容,请看以下代码:

我们对以上的程序进行编译并运行,请看下图运行结果:

CharTest04 运行结果

在这里我简单提示一下,以上程序中的“+”运算符起到的作用是求和并不是字符串连接运算,剩下的大家思考一下吧,后面我们再看。

 

整数型详解

整数型数据在java 中有 4 种表示方式,分别是十进制、八进制、十六进制、二进制。不过要注意的是二进制写法是在Java7 中引入的,对于Java7 之前的版本不支持该语法。默认为十进制,以0 开始表示八进制,以0x 开始表示十六进制,以 0b 开始表示二进制。

十进制、八进制、十六进制有什么区别,请看:

  • 十进制:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17...

  • 八进制:0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21...

  • 十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11...

接下来我们在代码中试验一下以上的几种写法,请看以下代码:

我们对以上的程序进行编译并运行,请看下图运行结果:

IntegerTypeTest01 的运行结果

通过测试确实可以看到八进制10 8,十六进制的10 16,二进制的 10 2。在实际的开发中大部分还是直接使用十进制的方式,因为十进制对于我们来说更直观,程序的可读性会更好一些。

java 语言当中,整数型字面量被当做 int 类型处理,也就是说在程序中只要遇到整数型的数字,该数字会默认被当做 int 类型来处理,如果想表示 long 类型则需要在字面量后面添加L/l,建议大写L,因为小写l 1 不好区分。请看以下程序:

在以上的代码中int a = 10;表示声明一个int 类型的变量a,然后给a 变量赋值10,其中 10 是一个整数型字面值,根据以上规则,10 默认被当做int 类型来处理,那么int a = 10;就表示int 类型的字面量 10 赋值给int 类型的变量a,这个过程是不存在类型转换的。

另外在以上代码中long b = 10L;表示声明一个long 类型的变量b,然后给 b 变量赋值 10L由于 10 后面添加有L,则编译器会将 10L 当做long 类型来处理,long 类型的字面量 10L 赋值long 类型的变量b,这个过程也是不存在类型转换的。

接下来我们在以上代码的基础之上继续编写,请看以下代码:

我们可以看到在第 5 行新增了一行代码:long c = 10;,这行代码是什么原理呢?我们先来编译,看看是否符合Java 的语法规则,请看下图编译结果:

IntegerTypeTest02.java 的编译结果

接下来我们再运行一下,请看下图运行结果:

IntegerTypeTest02 运行结果

通过以上的测试我们可以看到long c = 10;这种编写方式符合语法规则,并且也可以正常运行,我们来分析一下,10 是整数型字面量,按照以上规则,Java 中会将 10 默认当做int 类型处理,而c 变量是long 类型,int 类型可以赋值给long 类型的变量吗?

答案是可以的,因为我们已经测试过了。这是因为int 占用4 个字节,而long 占用 8 个字节,在Java 中小容量可以直接赋值给大容量,这个过程被称为自动类型转换。

接下来我们对以上代码继续编写,请看以下代码:

我们可以看到在第 7 行新增了一行代码:int d = c;,我们先对以上代码进行编译,请看以下编译结果:

IntegerTypeTest02.java 的编译结果

我们可以看到编译器报错了,也就是以上编写方式不符合 Java 语法规则,我们来看一看为什么,首先我们看到错误提示信息是:不兼容的类型,从long 转换到int 可能会有损失。

这是因为c 变量是long 类型占用8 个字节,而负责接收的 d 变量是int 类型占用 4 个字节,很明显是大容量转换成小容量,好比一大玻璃杯中的水倒向小玻璃杯,最终的结果可能会使水溢出, 因为小玻璃杯可能放不下。

编译器检测到这种情况的时候就不会自作主张了,需要程序员来指 定,因为数据的损失需要程序员知晓,毕竟数据损失是一件很严重的事情,而编译器自身是不会负责的,于是Java中规定大容量如果需要转换成小容量,则程序员必须手动添加强制类型转换符才能编译通过,这个过程我们称为强制类型转换。

我们对以上代码进行修改,请看以下 修改之后的代码:

我们可以看到将第 7 行的代码修改为:int d = (int)c;,这就是强制类型转换,语法格式是在需要强转的数据前添加小括号,小括号中写上要转换的类型,我们对以上的程序编译并运行, 请看下图结果:

IntegerTypeTest02 运行结果

通过以上的测试我们得出这样一条结论:

一个数据在赋值给一个变量的时候存在三种不同的情况:

  • 第一种情况是类型一致,不存在类型转换;

  • 第二种情况是小容量可以自动赋值给大容量,称为自动类型转换;

  • 第三种情况是大容量不能直接赋值给小容量,大容量如果一定要赋值给小容量的话,必须添加强制类型转换符进行强制类型转换操作。

不过需要注意的是,强制类型转换在使用的时候一定要谨慎,因为可能会导致精度损失,因为大杯水倒入小杯中,可能会导致水的溢出,不过这也不全都是,也可能精度不会损失,如果大杯中的水很少,这个时候倒入小杯中也可能是不溢出的。就像以上的运行结果,虽然进行了强制类型转换,但并没有损失精度。

接下来我们一起来看看精度损失是什么情况,请看以下代码:

我们可以看到在以上代码中,int 类型的变量 a 强转为 byte 类型,我们对以上代码进行编译并运行,请看下图运行结果:

IntegerTypeTest03 运行结果

4 个字节的int 类型300 强转为1 个字节的byte 类型,最终的结果是44,为什么呢?这是因为首先int 类型的300 对应的二进制码是:00000000 00000000 00000001 00101100,强制类

型转换的时候会变成 1 个字节,这个时候底层是将前 3 个字节砍掉了,也就是最后的二进制码是:00101100,这个二进制码对应的是 44。所以精度损失之后的结果就是44 了。

接下来我们再来看一下精度损失之后成为负数的情况,请看以下代码:

我们对以上的代码进行编译和运行,请看下图结果:

IntegerTypeTest04 运行结果

为什么以上的运行结果是-106呢?

这是因为计算机在任何情况下都是采用二进制补码的形式存储数据的为什么采用二进制补码形式存储数据,这里就不再赘述了,不做学术研究)。计算机二进制编码方式包括原码、反码、补码。对于正数来说原码、反码、补码是同一个。

于负数来说呢?负数的反码是在其原码的基础上, 符号位不变,其余各个位取反,例如:-15 的原码是:10001111-15 反码是:11110000。负数的补码是其反码再加1。例如:-15 的补码11110000 111110001。换句话说-15 最终在计算机上会采用 11110001 二进制来表示。

我们再来看看以上的程序:int a = 1504 个字节的150 对应的二进制是:00000000 00000000 00000000  10010110,强转时前 3  个字节砍掉,最终计算机存储的二进制为:10010110,我们之前说过最终存储在计算机中的是二进制补码形式,也就是说 10010110  现在是二进制补码形式,我们通过补码推出原码,负数的补码是反码+1,所以10010110 1 就是反码 10010101反码的符号位不变,其余位取反就能得出原码:11101010,而这个值就是-106

对于以上原理 大家了解即可,在实际的开发中很少使用。

接下来我们再来看一段程序,分析以下程序错在哪里,为什么以及怎么解决?

我们对以上的程序进行编译,请看下图结果:

IntegerTypeTest05.java 的编译结果

我们可以看到,编译报错了,为什么呢?

原因是:java 程序见到 2147483648 这个整数的时候,默认将其当做int 类型来处理,但这个数字本身已经超出了 int 类型的取值范围(int 型最大值是 2147483647,所以编译报错了

注意:这里编译报错的原因并不是说 long 类型存不下,long 类型的变量完全可以存储这个数字,以上程序出现的错误是在赋值之前,还没有进行到赋值运算,数字本身已经超出 int 类型范围,自己崩掉了。

怎么解决以上的问题呢?其实很简单,我们只要让 java 程序认为 2147483648 是一个long 类型的数据就行了,也就是说在该数字后面添加L 问题就解决了(long num = 2147483648L;)。

接下来,一起来看一下以下程序是否可以编译通过,请看代码:

我们来分析一下以上的代码:byte b = 1;1 是整数型字面量,在java 中默认被当做int 型来处理,int 类型占用 4 个字节,b 变量是 byte 类型占用 1 个字节,根据上面所学,大容量无法直接赋值给小容量,要想赋值需要进行强制类型转换,这里没有强转,所以按理说编译是报错的,接下来我们来看一下编译结果,请看下图:

IntegerTypeTest06.java 编译结果

编译结果让我们意外了,编译通过了,这是为什么呢?

我来给大家解释一下,这是因为在java 语言有这样一条规定,大家记住就行了,如果当一个整数型字面量没有超出byte  类型取值范围时,可以直接赋值给byte 类型变量。那么如果整数型字面量超出byte 类型取值范围会怎样呢?我们来测试一下,请看以下代码:

我们对以上的代码进行编译,请看下图编译结果:

IntegerTypeTest06.java 的编译结果

我们可以看到编译报错了,错误信息是第 7 行:不兼容的类型,从int 转换到byte 可能会有损失。对于以上程序的第5 行并没有报错。针对这个错误信息我们之前在学习强制类型转换的时候接触过,也就是说以上程序要想编译通过必须进行强制类型转换,请看以下代码:

我们对以上的程序进行编译并运行,请看下图结果:

IntegerTypeTest06 的运行结果

我们通过测试结果可以看出程序正常编译并运行了,这也印证了我们上面所说:当整数型字面量没有超出byte 类型取值范围时,可以直接赋值。不过,如果超出了byte 类型的取值范围,在使用时必须进行强制类型转换。但需要注意的是强制类型转换会导致精度的损失,例如以上代码中int 类型的 128 强转为byte 之后结果是-128这是因为计算机以二进制补码形式存储数字),还是要谨慎使用。

其实除了byte 类型有这样的规则之外,short char 也具有同样的规则,接下来我们先对

short 进行测试,代码如下所示:

我们对以上的代码进行编译,请看下图编译结果:

IntegerTypeTest07.java 的编译结果

通过以上的结果可以看出第 3 行代码编译通过了,但是第5 行编译报错了,这是因为 short 类型最大值是 32767。对于第 5 行的 32768 已经超出了short 类型取值范围,同样如果要使用的话需要进行强制类型转换,这里就不再演示了。

接下来我们再来看一看char 类型,char  样满足以上规则,当没有超出char 类型取值范围时,可以直接赋值,请看以下代码:

我们对以上的程序进行编译并运行,请看下图结果:

IntegerTypeTest08 的运行结果

通过以上的测试可以看出当没有超出char 类型取值范围的时候,整数型字面量是可以直接赋值给char 类型变量的,但结果为什么会是字符a b 呢?

这是因为程序char c1 = 97;在实际执行的时候存在隐式的类型转换,会自动将int 转换成char,由于 char 最终是一个字符,而97 正好是字符a ASCII 码,所以最终结果是字符 a b

那么如果超出char 类型取值范围会怎样呢(char 最大值是 65535)?请看以下代码:

我们对以上代码进行编译,请看下图编译结果:

IntegerTypeTest08.java 的编译结果

通过以上测试我们同样看到一旦超出char 类型取值范围时就不能直接赋值了,要修改以上的错误也是需要进行强制类型转换操作,这里就不再演示了。

综上所述,大家记住一个结论:当一个整数型的字面量没有超出byte,short,char  的取值范围,可以将该字面量直接赋值给byte,short,char 类型的变量,如果超出范围则需要添加强制类型转换符。

通过本小节的学习,我们需要掌握以下几个内容:

第一,Java  中的整数型字面量有四种表示方式,但最常用的还是十进制;

第二,整数型字面量被当做 int 处理,如果想当做 long 处理, 需要在后面添加L  l

第三,小容量转换为大容量被称为自动类型转换;

第四,大容量转换成小容量称为强制类型转换,强转时需要添加强制类型转换符,但要注意强转可能损失精度; 

五,当整数型字面量没有超出byteshortchar 的取值范围,可直接赋值。

最后附Java零基础视频教程给大家,配合学习效果更佳!!







Java零基础快速入门|数据类型(上)的评论 (共 条)

分享到微博请遵守国家法律