黑马程序员——JAVA基础---基本数据类型

时间:2022-06-20 00:39:28

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
##基本数据类型 ##

一 整数类型

  整数类型用来存储整数数值,即没有小数部分的数值。与C、C++语言相同,整数在Java语言中有3种表示形式:十进制、八进制和十六进制。
十进制整数:以1~9开头的数,如123、−456、0。
八进制整数:以0开头且其后由0~7范围(包括0和7)内的数组成的整数,如01011和031,分别表示十进制数521和25,计算方式如下。
01011转换为十进制数,1  83 + 0  82 + 1  81 + 1  80 = 521
031转换为十进制数:(3  81 + 1  80)= 25。
十六进制整数:以0x或0X开头且其后由0~9、a~f(包括0和9、a和f)组成,如0x25、0Xb01e,分别表示十进制数37和45086,计算方式如下。
0x25转换为十进制数:2  161 + 5  160 = 37;
0Xb01e转换为十进制数:11  163 + 0  162 + 1  161 + 14  160 = 45086。
注意:
在十六进制数中,0~9由数字表示,10~15分别由a、b、c、d、e、f代替。无论是十进制数、八进制数还是十六进制数,计算机会先将它们转换成二进制数,再进行计算。
二进制数是由数字0和1组成的数据流(或数据序列),在内存中只能存放二进制形式的数据,如00011101,这个二进制数据流(或称二进制数据序列)共有8位(最左边的为最高位,最右边的为最低位),每一位称为1个比特(bit),每8位称为1个字节(byte)。这个二进制数表示十进制整数29,计算方式:1  24 + 1  23 + 1  22 + 0  21 + 1  20 29。

  在Java中,存在4种类型来存储整数:byte、short、int和long,它们的取值范围如表3.1所示。其中,int是最常用的一种整数类型,但因在大型计算中常会生成很大的整数,超出int类型所表示的取值范围,所以就需要使用long类型,byte和short类型主要用于一些特殊的情况。
表 各基本数据类型的取值范围、占用的内存大小及默认值

黑马程序员——JAVA基础---基本数据类型

可以根据这些类型定义相应的整型变量,定义方法如下:
byte a //定义变量a并指定为byte型
short b //定义变量b并指定为short型
int c //定义变量c并指定为int型
long d //定义变量d并指定为long型
在为这些整型变量赋值时,既可赋值为十进制的整数,也可赋值为八进制或十六进制的整数,但要注意变量能够接受的最大与最小值,否则会出现错误。对于long型值,若赋予的值大于int型的最大值或小于int型的最小值,则需要在数字后加L或l(小写的L),表示该数值为长整型,例如,long num=2147483649L。
对变量赋值后,通过输出语句会自动地将变量值转换为十进制整数输出。
例如,分别为字节型变量a赋值为十进制数123、短整型变量b赋值为八进制数045、整型变量c赋值为十六进制数0xb12f、长整型变量d赋值为十六制数0x160000000L,然后输出这些变量值。
byte a=123; //定义byte型变量a, 并赋给十进制数值123
short b=045; //定义short型变量b, 并赋给八进制数值045
int c=0xb12f; //定义int型变量c, 并赋给十六进制数值0xb12f
long d=0x160000000L; //定义long型变量d, 并赋给十六进制数值0x160000000L
System.out.println(a); //输出结果为: 123
System.out.println(b); //输出结果为: 37
System.out.println(c); //输出结果为: 45359
System.out.println(d); //输出结果为: 5905580032
说明:
赋给long型变量d的十六进制数0x160000000转换为二进制数后,需要占用内存36位(由左向右,每位数字转换成4位的二进制数,如0x39将转换为0011 1001),而Java中规定int型数据占用的内存为32位,0x160000000超出了int范围,需要在数字后加L或l

二 浮点类型

    Java语言包含两种浮点类型二:单精度浮点类型和双精度浮点类型,分别用float和double关键字来标识,计算机通过这两种数据类型来存储小数。
在Java中,默认情况下小数都被看做double型,占用内存64位,若想使用float型小数,则需要在小数后面添加字母F或f,如1.23F,它占用内存32位。
   计算机计算出的小数点后的n位,与实际的数值会有一定的误差,它只能尽量地去接近实际值,所以位数越多越精确。通常float型就足够了,若要求更精确的计算,可以使用double型,但也要考虑节约资源。
定义浮点型变量的方法如下:
float a //定义变量a并指定为float型
double b //定义变量b并指定为double型
在为浮点型变量赋值时,既可以赋值为以十进制形式表示的小数,又可以赋值为以科学记数法形式表示的数值。对于float型,必须在数值后加F或f,表示该数值为单精度浮点数。
单精度浮点型变量a1赋值以十进制形式表示的小数12.34F,为单精度浮点型变量a2赋值以科学记数法形式表示的数值1.234E1F,为双精度浮点型变量b1赋值以十进制形式表示的小数56.78,为双精度浮点型变量b2赋值以科学记数法形式表示的数值567.8E-1,然后输出这些变量值。

float a1=12.34F; //为float型变量a1赋值为十进制表示的单精度小数(在数字后加F)
float a2=1.234E1F; //为float型变量a2赋值为科学记数法表示的单精度小数(在数字后加F)
double b1=56.78; //为double型变量b1赋值为十进制表示的双精度小数
double b2=567.8E-1; //为double型变量b2赋值为科学记数法表示的双精度小数
System.out.println(a1); //输出结果为: 12.34
System.out.println(a2); //输出结果为: 12.34
System.out.println(b1); //输出结果为: 56.78
System.out.println(b2); //输出结果为: 56.78

三 字符类型

Java语言中的字符类型用来存储单个字符,它占用16位(两个字节)的内存空间,使用关键字char进行标识。定义字符类型的变量,可以通过关键字char来进行,定义方法如下:
char c1 //定义字符型变量c1
char c2 //定义字符型变量c2
赋给char型变量的字符常量值必须用英文状态下的一对单引号括起来,由于Java的字符采用Unicode编码,一个中文字与一个英文字母在Java中同样都是用一个字符来表示。
分别为字符型变量a赋值’m’、字符型变量b赋值’明’、字符型变量c赋值’9’、字符变量d赋值
@’,然后输出。
char a=’m’; //为字符型变量ch1赋值字符常量’m’
char b=’明’; //为字符型变量ch1赋值字符常量’明’
char c=’9’; //为字符型变量ch1赋值字符常量’9’
char d=’@’; //为字符型变量ch1赋值字符常量’@’
System.out.println(a); //输出结果为: m
System.out.println(b); //输出结果为: 明
System.out.println(c); //输出结果为: 9
System.out.println(d); //输出结果为: @
另外,也可以将字符型变量赋值为0~65535范围内的整数,这些整数可使用十进制、八进制或十六进制来表示。根据变量类型,计算机会自动将这些整数转换为所对应的字符输出。
分别为字符型变量ch1赋值十进制数97、字符型变量ch2赋值八进制数0142、字符型变量ch3赋值十六进制数0x63,然后输出。
char ch1=97; //为字符型变量ch1赋值十进制数97
char ch2=0142; //为字符型变量ch2赋值八进制数0142
char ch3=0x63; //为字符型变量ch2赋值十六进制数0x63
System.out.println(ch1); //输出结果为: a
System.out.println(ch2); //输出结果为: b
System.out.println(ch3); //输出结果为: c

四 布尔类型

  布尔型数据只有两个值:true和false,分别代表布尔逻辑中的“真”和“假”,且布尔值不能与整数进行转换,通常布尔型数据在流程控制中作为判断条件。
定义布尔型变量,可以通过关键字boolean来定义,定义方法如下:
boolean b1; //定义boolean型变量b1
boolean b2; //定义boolean型变量b2
布尔型数据只存在true和false数值,所以在为boolean型变量赋值时,除这两个值外的其他任何数值都是非法的。
为布尔型变量married赋值false,为alive赋值true,然后输出。
boolean married=false;
boolean alive=true;
System.out.println(“已婚:”+married); //输出结果为: false
System.out.println(“生命:”+alive); //输出结果为: true

五 基本数据类型间的转换

  前面对基本的数据类型进行了介绍,下面对基本数据类型的转换进行介绍。Java中有两种类型转换形式,分别是自动类型转换与强制类型转换。
1.自动类型转换
自动类型转换必须在相同数据类型的数据之间进行,并且必须是由低精度类型向高精度类型转换。自动类型转换适合于整数类型与浮点类型,例,从byte类型向int类型转换时,就会发生自动类型转换。
下面来看一个实现自动类型转换的实例:
byte bt = 3;
int it = bt;
从上面的实例可以看出,将低精度的byte型变量赋值给int型变量时即实现了自动类型转换。整型与浮点型数据的精度由低到高如图所示。
黑马程序员——JAVA基础---基本数据类型
图 数据精度排列

2.强制类型转换
与自动类型转换正好相反,强制类型转换是将高精度变量向低精度变量进行转换。在实现强制类型转换时,需要注意的是如果将高精度数据向低精度数据进行类型转换时,可能会因为超出了低精度数据类型的取值范围,导致数据丢失、不完整。
实现数据的强制类型转换,要在被转换的变量前面添加转换的数据类型,具体格式如下:
目标类型 变量 = (目标类型)表达式
目标类型表示要转换后的数据类型,下面的实例就实现了强制类型转换:
int id = 16;
byte bid = (byte)id;

   在本次强制类型转换过程中,由于int型变量值没有超出byte型的取值范围,因此byte型变量可以完全容纳int型变量。但如果此时int型变量的值为168(int型数值长度为32位),当int型数值强制转换为byte时,就超出了byte类型的取值范围,此时就会出现数据丢失的现象,因此要格外注意。图给出了数值类型之间的合法转换。
黑马程序员——JAVA基础---基本数据类型

图 基本数据类型之间的合法转换
注意:
boolean不能被强制转换为其他数据类型,反之亦然。