1.1 数据类型
Java中的数据类型分为基本数据类型和引用数据类型两种。关于引用类型,我们在后面的学习中会逐渐理解的,这里不再赘述,重点介绍基本数据类型。在Java中有8种基本数据类型来存储数值、字符和布尔值,如图4.1所示。
图4.1 Java数据类型
1.3.1 整数类型
整数类型用来存储整数数值,即没有小数部分的数值。可以是正数、负数,也可以是0。根据所占内存的大小不同,可以分为byte、short、int和long 4种类型。他们所占的内存和取值范围如表4.2所示。整数默认的类型为int型。
图4.2 整数类型(1个字节是8位)
1.3.1.1.byte型
使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。byte型是整型中分配内存空间最少的,只分配1个字节,取值范围也是最小的,只在-128~127之间,在使用时一定要注意,以免数据溢出产生错误。
【例4.1】定义byte型变量,并对其进行简单赋值操作,验证其几点要素;
package cn.basic.datatype.bytes; public class BytePractice{ public static void main(String[] args){ byte a = 45 , b = 127 , c ; System.out.println(a+b);//整数类型的默认类型为int,所以再给byte类型进行运算时会先将其转换为int类型,然后进行运算 //System.out.println(c); 我们声明了变量却未给其赋值,这里会报未初始化变量 /* b = 128 ; byte类型的内存空间为1字节,取值范围为-128-127,所以这里会报损失精度的问题,但是仍然可以通过强制转型来解决,结果就是输出与实际数值不符,这是精度损失造成的 System.out.println(b);*/ } }
注意:成员字段如果没有初始化,那么编译时会自动初始化为默认值。但局部变量如果没有初始化则会在编译时报错“变量未经初始化”;
1.3.1.2.Short型
Short型是短整型,使用short关键字来定义short型变量,可以一次定义多个变量并对其赋值,也可以不进行赋值。系统给short型在内存中分配2个字节,取值范围也比byte大得多,在-32768~32767之间,虽然取值范围变大,但仍要注意溢出。
【例4.2】定义short型变量
short a = 23 ; //定义short型变量a、b、c,并赋值给a、b
1.3.1.3.int型
int型即整型,使用int关键字来定义int型变量,可以一次定义多个变量并对其赋值,也可以不进行赋值。int型变量取值范围很大,在-2147483648~2147483647之间,足够在一般情况下使用,所以是整数变量中应用最广泛的。Int类型是整数类型的默认类型。
【例4.3】定义int型变量
int a = 23 , b = 78 ; ////定义int型变量a、b、c,并赋值给a、b
1.3.1.4.long型
long型即为长整形,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。而在对long型变量进行赋值时结尾必须加上“L”或“l”(因为I和i的大写相似,所以我们一般使用L,便于阅读。),否则将不被认为是long型,而会被默认作为int型处理,这时可能会出现溢出内存的错误。所以当数值过大超过int型范围时就用long型,系统分给long型8个字节,取值范围更大,在-9223372036854775808~9223372036854775807之间。
【例4.4】定义long型变量,并对其进行一些分析;
package cn.basic.datatype.longs; public class LongPractice{ public static void main(String[] args){ long a = 3890 , b; //当我们定义一个变量时如果他的数值超过int的范围,却又不对其进行末尾强制, //b = 922337203685477 ; 那么程序会将其当做int处理,则会发生错误,提示超出范围 //System.out.println(b); 提示我们数值过大 System.out.println(a); b = 922337203685477L; System.out.println(b); b = 922337203685477l; System.out.println(b); //b = 922337203685477 L; 我们在定义long型变量时要注意,初始化的后面紧跟"L"或"l",不能有空格的存在,否则会提示错误 System.out.println(b); } }
我们在定义long型数据时末尾最好加L,因为l和1是不好区分的;
上面的四种整数类型在Java程序中有3种表示形式,分别为十进制、八进制、和十六进制。
- l 十进制表示法。十进制的表现形式,是我们现实世界最熟悉的一种表达形式了,即逢10进1,每位上数字最大为9,如120、99等都是十进制。
- l 八进制表示法。八进制即逢8进1,每位上的数字最大是7,且必须以0开头。例如,0123(转换成十进制是1*8^2+2*8^1+3*8^0=64+16+3=83)、-123(转换成十进制数为-(1*8^2+2*8^1+3*8^0)=-(64+16+3)=-83)都是八进制。
- l 十六进制表示法。实际上中国古代就有16进制,所谓的半斤八两就是如此,逢16进1,每位上最大数字是f(15),且必须以0X或0x开头。如0x25转换成十进制是37.
【例4.5】整数的各型运算
package cn.basic.datatype.integer; public class IntegerPractice{ public static void main(String[] args){ byte a = 127 ; short b = 3276 ; int c = 214748364 ; long d = 21474836423444L ; long resultL = a + b + c + d ; //int resultD = a + b + c + d ;当一个高精度的数据类型向低精度转换时,会报可能损失精度的错误 //int dd = (int)d; int dd = new Long(d).intValue(); int resultD = a + b + c + dd ; System.out.println("结果为"+resultL); System.out.println("结果为"+resultD); } }
1.3.2 浮点类型
浮点类型表示有小数部分的数字。Java语言中浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围,如图所示。浮点型默认的类型为double。
1.3.2.1 float型
Float型即为单精度浮点型,使用float关键字来定义float型变量,可以一次定义一个或多个变量并对其进行赋值,也可以不进行赋值。在对float型进行赋值时末尾必须加上“f”或“F”,如果不加,系统会将其默认作为double型来处理,float型的取值范围在1.4E-45~3.4028235E38之间。
【例4.6】对float型进行定义;
package cn.basic.datatype.floats; public class FloatPractice{ public static void main(String[] args){ Float a = 1.4E-45F ; System.out.print(a); } }
1.3.2.2 double型
double型即双精度浮点型,使用double关键字来定义double型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。在给double型赋值时,可以使用后缀“D”或“d”明确表明这是一个double类型数据,但加不加并没有硬性要求,可以加也可以不加,double型变量的取值范围在4.9E-324和1.2976931348623157E-308之间。
单精度和双精度的区别我们会在后面探讨数据精度中讲解。
【例4.6】定义一个double型变量和float型变量,并对它们进行赋值、运算和输出;
package cn.basic.datatype.doubles; class DoublePractice{ public static void main(String[] args){ double a = 987.987123456789012D , b = 789.789879887918799d ; double c = 68.8978978977 ; float aa = 987.987123F ; //当我们定义一个float型变量却又不对其进行末尾"F"或"f",那么会提示错误可能损失精度 float d = 987.987123456789012F ; float e = 987.987153456789012F , f = 987.987144456789012f ; System.out.println(a+"和"+b) ; System.out.println(c) ; System.out.println(aa+"和"+d+"和"+e+"和"+f) ; } }
1.3.3 字符类型
Char型即字符类型。使用char关键字进行声明,用于存储单个字符,系统分配两个字节的内存空间。在定义字符型变量时,要用单引号‘’括起来。如‘s’表示一个字符,且单引号中只能有一个字符,多了就不是字符类型,而是字符串类型,需要用双引号进行声明。
Java 字符采用 Unicode 编码,每个字符占两个字节,因而可用十六进制编码形式表示。【注:Unicode是全球语言统一编码,所有的字符都分配两个字节的空间】
与C、C++语言一样,Java语言也可以把字符作为整数对待,由于Unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xffff),所以Java中的字符几乎可以处理所有国家的语言文字。若想得到一个0~65536之间的数所代表的Unicode表中相应位置上的字符,也必须使用char型显式转换。
在字符类型中有一种特殊的字符,以反斜线“\”开头,后跟一个或多个字符,具有特定的含义,不同于字符原有的意义,叫做转义字符,Java中的转义字符如下所示。
注意:转义字符也是字符,所以在使用时同样要加‘’单引号。
【例4.7】创建一个类CharPractice,实现将Unicode表中某些位置上的一些字符以及一些字符在Unicode表中的位置在控制台上面输出。
package cn.basic.datatype.ch; class CharPractice{ public static void main(String[] args){ int a = ‘d‘ , aa = 97 ; char b = 97 , c = ‘a‘ ; char d = ‘\\‘ , e = ‘\b‘ , f = ‘\n‘ , g = ‘\u2605‘ , h = ‘\u0052‘ ; //转义字符 char i = ‘\u4e08‘; System.out.println(a+"和"+aa+"和"+b+"和"+c) ; System.out.println(d+"和"+e+"和"+"和"+g+"和"+h) ; System.out.println(f) ; System.out.println(i); } }
4.3.4 布尔类型
布尔类型又称逻辑类型,只有“true”和“false”两个值,分别代表布尔逻辑中的“真”和“假”,使用boolean关键字来声明布尔类型变量,通常被用在流程控制中作为判断条件。
【例4.8】声明一个布尔变量,并对其进行输出;
boolean abc = true , cba = false ; System.out.println(abc+"还是"+cba) ; if(abc)System.out.println("真就是真!"); else{ System.out.println("假就是假!"); } if(cba)System.out.println("真就是真!"); else{ System.out.println("假就是假!"); }
原文地址:https://www.cnblogs.com/lin-jing/p/8001753.html