八种基本数据类型分别是什么和什么,八种基本的数据类型
如何解决写爬虫IP受阻的问题?立即使用。
本教程运行环境:windows7系统,java8版本8,DELL G3电脑。
8种基本数据类型
Java中有八种基本的数据类型,分别用来存储整数、浮点数、字符数据和布尔数据。需要注意的是,现在介绍的只是基本数据类型,后面还会介绍很多非基本数据类型。基本数据类型如图1所示:
图一
从图-1可以看出,基本数据类型主要分为四类(整型、浮点型、char、boolean),整型分为四个子类(byte、short、int、long),浮点型也分为两个子类(float、double)。这些数据类型有什么区别?figure2显示了这八种数据类型的存储空间和使用场景:
图2
在上述八种数据类型中,最常用的有五种,分别是int、long、double、char和boolean。其余数据类型几乎不用,所以要求重点学习这五种基本数据类型,其余数据类型有兴趣可以学习。
2. int类型
2.1. int类型
int是最常用的整数类型。int类型的变量占用4个字节,即32位内存空间。Int的最大表达式范围是:-231 ~ 231-1,即-2147483648 ~2147483647,大约是正负21亿。
2.2. 整数直接量是int类型
所谓文字整数就是直接写出来的整数。例如,在下面的语句中,100是文字整数。
int a=100
int a=100关于整数直接数量,应注意以下几点:
默认情况下,整数的直接量的类型是int类型。如果直接写出的整数超出了int的表达式范围,就会出现编译错误。以下语句是超出整数范围导致的编译错误。
int d=10000000000//编译错误10000000000这个值写出来就是错误的,因为Java认为直接写出来的整数都是int类型,这个值超出了int的表达式范围。
int d=10000000000//编译错误10000000000这个值写出来就是错误的,因为Java认为直接写出来的整数都是int类型,这个值超出了int的表达式范围。除了通常的十进制数形式,整数直接量还可以写成十六进制形式(从0x或0X开始)或八进制形式(从0开始)。请看下面三种形式的直接量:
int a=100000//十进制系统
int b=0x186a0//十六进制
int c=0303240//八进制
int a=100000//十进制系统
int b=0x186a0//十六进制
int c=0303240//八进制
2.3. 整型数据除法运算中的取整
如果两个整数相除,小数部分会被丢弃(注意:不四舍五入),结果也是整数。代码如下:
int c=5/3;
system . out . println(c);//c的值为1,四舍五入。
int total=87
int error=23
int percent=误差/总数* 100;
System.out.println(百分比“%”);//结果是0%,23除以87的整数部分是0,乘以100是0。
百分比=100 *误差/总数;
System.out.println(百分比“%”);//结果是26%,230除以87的整数部分是26
int c=5/3;
system . out . println(c);//c的值为1,四舍五入。
int total=87
int error=23
int percent=误差/总数* 100;
System.out.println(百分比“%”);//结果是0%,23除以87的整数部分是0,乘以100是0。
百分比=100 *误差/总数;
System.out.println(百分比“%”);//结果是26%,230除以87的整数部分是26
2.4. 运算时要防止溢出的发生
。当两个整数进行运算时,结果可能会超出整数的范围而溢出。如果正数太大,溢出将导致负数;负数过多造成的溢出导致正数。代码如下:
int a=2147483647int类型的整数的上限
int b=-2147483648;int类型的//整数的下限
a=a 1;
b=b-1;
system . out . println( a= a);//输出结果:a=-2147483648溢出,结果错误。
system . out . println( b= b);//输出结果:b=2147483647溢出,结果错误。
int a=2147483647int类型的整数的上限
int b=-2147483648;int类型的//整数的下限
a=a 1;
b=b-1;
system . out . println( a= a);//输出结果:a=-2147483648溢出,结果错误。
system . out . println( b= b);//输出结果:b=2147483647溢出,结果错误。
3. long类型
3.1. long类型
表示整数时,如果int类型的范围不够,可以使用long类型。long类型的变量占用8个字节(即64位),最大表示范围为:-263 ~ 263-1,即-922372036854775808 ~ 92233。
如果要表示长的直接量,需要以L或L结尾,示例代码如下:
长a=10000000000//会出现编译错误,因为1000000000编译器认为是int类型,这个值超出了int的范围。
长b=10000000000l//正确
长a=10000000000//会出现编译错误,因为1000000000编译器认为是int类型,这个值超出了int的范围。
长b=10000000000l//正确
3.2. 使用long类型进行较大整数的运算
对于大整数运算(超出int的表达式范围),可以使用long。示例代码如下:
长距离1=10000 * 365 * 24 * 60 * 60 * 299792458 l;
//必须有一个long数据参与运算结果才能是long。
system . out . println( distance 1= distance 1);//distance1=547836957965889536结果正确。
长距离2=10000 * 365 * 24 * 60 * 60 * 299792458;
system . out . println( distance 2= distance 2);//Distance2=-197321136溢出。=符号后的数据默认为int类型,超出范围,溢出。
长距离1=10000 * 365 * 24 * 60 * 60 * 299792458 l;
//必须有一个long数据参与运算结果才能是long。
system . out . println( distance 1= distance 1);//distance1=547836957965889536结果正确。
长距离2=10000 * 365 * 24 * 60 * 60 * 299792458;
system . out . println( distance 2= distance 2);//Distance2=-197321136溢出。=符号后的数据默认为int类型,超出范围,溢出。
3.3. 通过时间毫秒数来存储日期和时间
JDK提供System.currentTimeMillis()方法,该方法返回从1970年1月1日0: 00到这一时刻的毫秒数。数据太大,所以它的数据类型很长。示例代码如下:
long time=system . current time millis();
system . out . println(time);//输出结果是:1383835712828
long time=system . current time millis();
system . out . println(time);//输出结果为:1383835712828。从上面的代码可以看出,输出结果已经超过了int类型的最大值。因此,JDK设计的返回类型是长的,这种方法常用于计时操作。
4. double类型
4.1. 使用double进行浮点数的运算
前面学过的int和long都是用来存储整数的,小数是浮点数,包括:float(单精度)和double(双精度)。double类型的精度值是float类型的两倍,因此得名Double Precision。在实际应用开发中,很少使用float,大多数场合使用double表示浮点数。示例代码如下:
双圆周率=3.14;
双r=8;
double s=pi * r * r
system . out . println( s= s);//输出结果为:s=200.96
双圆周率=3.14;
双r=8;
double s=pi * r * r
system . out . println( s= s);//输出结果为:s=200.96
4.2. 浮点数直接量是double类型
。浮点数的直接量有两种写法:1)通常的写法,如:3.14,314,0.1, 5。2)科学的计数方法,如:1.25E2,1.25e2,1.25e2-2。其中1.25E2表示1.25乘以10的2次方。
的默认浮点直接数量是double。如果需要表示浮点型的直接量,需要加上“f”或“f”后缀。例如:
Float f1=3.14 //编译错误,应该写成3.14f。
Float f1=3.14 //编译错误,应该写成3.14F:
4.3. double运算时会出现舍入误差
。二进制不能准确表示1/10,就像十进制不能准确表示1/3一样。
所以二进制表示十进制会有一些舍入误差,对于一些需要精确运算的场合会导致代码缺陷。代码如下:
双钱=3.0;
双倍价格=2.9;
System.out.println(货币价格);//输出结果是:0.10000000000009
双钱=3.0;
双倍价格=2.9;
System.out.println(货币价格);//输出结果为:0.100000000000009。如果需要精确运算,可以考虑放弃double或者float,采用BigDecimal类实现。这将在后面的章节中介绍。
5. char类型
5.1. char类型
字符类型char实际上是一个16位无符号整数(都是正数),这个值就是对应字符的编码。Java字符类型采用Unicode字符集编码(通用码,通用码,通用码),而Unicode是全球通用的定长字符集,所有字符都用16位表示。例如,字符A的实际值是97,字符A的实际值是65,字符0的实际值是48。
字符的直接数量可以是中或十六进制的形式,例如 \ U4E2D ,代码如下:
C1=中等;//中的代码存储在//c1中。
char c2= \ u4e2d//4E2D 是对应于 Zhong 的16位Unicode编码的十六进制表示
system . out . println(C1);
system . out . println(C2);
C1=中等;//中的代码存储在//c1中。
char c2= \ u4e2d//4E2D 是对应于 Zhong 的16位Unicode编码的十六进制表示
system . out . println(C1);
system . out . println(C2);上面代码的输出结果:c1的值是medium,c2的值也是medium,但是字符“medium”对应的Unicode代码实际上存储在c1和c2中,也就是一个无符号整数。
5.2. 对char型变量赋值
为char变量赋值时,可以使用以下三种方式:
方法1:
字符的直接数量:形似‘A’,字符的Unicode码(无符号整数值)实际上是存储在变量中的,一个char变量只能存储一个字符。例子如下:
char c1= A
char c1= A方法二:
直接整数:范围从0到65535的整数。实际存储在变量中的整数值表示与整数值对应的Unicode字符。例子如下:
char c2=65
char c2=65Unicode格式:以 \ u0041 的形式,Unicode字符的十六进制形式。例子如下:
char c3= \ u0041
char c3= \ u0041
5.3. 使用转义字符
字符的直接数量需要包含在一对单引号中。如果要表示单引号的字符,需要怎么表示?当你想输入或者换行的时候是什么意思?
因为单引号是有特殊含义的字符,所以不方便输出的字符可以用转义字符表示。示例代码如下:
char c= \ \
system . out . println(c);//输出结果是:\
char c= \ \
system . out . println(c);//输出结果为:\常见转义字符如下图2所示:
图2
6. boolean类型
6.1. 使用boolean变量进行关系运算
布尔类型适用于关系和逻辑运算,表示一个条件是否为真。只允许true或false值。True表示条件为真,false表示条件不为真。
布尔变量通常用于存储关系运算的结果。所谓关系运算就是比较两个变量的大小和相位等等(这个知识点后面会详细介绍)。布尔代码示例如下:
int age=18
布尔isChild=年龄16;
system . out . println(is child);ISCHILD的值为false
布尔运行=真;
布尔闭合=假;
int age=18
布尔isChild=年龄16;
system . out . println(is child);ISCHILD的值为false
布尔运行=真;
布尔闭合=假;
7. 基本类型间转换
7.1. 类型间转换
不同的基本类型可以直接相互转换。主要有两种方式:
自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。类型的大小关系如下图-3所示:
图3
Cast:从大字体到小字体需要cast字符,语法如下:
变量(要转换到的类型)由于大类型的精度值大于小类型的精度值,且取值范围大于小类型的精度值,所以在使用强制转换时,可能会造成精度的损失或溢出。因此,当使用强制转换时,需要明确告诉编译器强制转换正在进行中。
7.2. 强制转换时的精度丧失和溢出
基本类型转换如下例所示。铸造时注意精度可能的损失和溢出。
int a=100
int b=200
长c=a b;//自动将int转换为long
long l1=1024l
int I=(int)L1;//需要加强的转换字符不会溢出,因为1024在int的范围内。
长l=1024 l * 1024 * 1024 * 4;
int j=(int)l;//会发生溢出。
system . out . println(j);//结果是:0
双pi=3.1415926535897932384
float f=(float)pi;//会造成精度的损失,因为单精度的精度小于双精度。
system . out . println(f);//结果是:3.1415927
int a=100
int b=200
长c=a b;//自动将int转换为long
long l1=1024l
int I=(int)L1;//需要加强的转换字符不会溢出,因为1024在int的范围内。
长l=1024 l * 1024 * 1024 * 4;
int j=(int)l;//会发生溢出。
system . out . println(j);//结果是:0
双pi=3.1415926535897932384
float f=(float)pi;//会造成精度的损失,因为单精度的精度小于双精度。
system . out . println(f);//结果是:3.1415927
7.3. 数值运算时的自动转换
。如果表达式中出现多种数据类型,运算结果将自动转换为更大的类型。
例子如下:
//由于long类型的直接量,整个表达式的结果都是long。
长途=10000 * 365 * 24 * 60 * 60 * 299792458 l;
//由于double类型的直接量599.0的参与,整个表达式的结果是double
双改=800-599.0;
//结果是0.0,右边的数据都是int类型的。运算结果也是int类型,结果是0,然后赋给double。
将0转换为0.0
双倍百分比1=80/100;
//结果是0.8,右边的表达式是double类型,运算结果是double类型。
双倍百分比2=80.0/100;
//由于long类型的直接量,整个表达式的结果都是long。
长途=10000 * 365 * 24 * 60 * 60 * 299792458 l;
//由于double类型的直接量599.0的参与,整个表达式的结果是double
双改=800-599.0;
//结果是0.0,右边的数据都是int类型的。运算结果也是int类型,结果是0,然后赋给double。
类型,将0转换为0.0。
双倍百分比1=80/100;
//结果是0.8,右边的表达式是double类型,运算结果是double类型。
双倍百分比2=80.0/100;
7.4. byte、char、short转换为int
前面介绍的八种数据类型中,byte、char、short、int、long都代表整数类型,而整数的直接量是int。在实际使用中,为了方便起见,遵循以下规则:
int的直接量只要不超出其表示范围,可以直接赋给byte,char,short。例子如下:
字节b=97
短s=97
char c=97
字节b=97
短s=97
char c=97当运算中涉及byte、char、short时,运算前都转换为int。例子如下:
字节b=97
int num=b b//num的值是194。推荐视频教程:Java视频教程。以上是八种基本数据类型是什么的详细说明。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。