八种基本数据类型分别是什么和什么,八种基本的数据类型

  八种基本数据类型分别是什么和什么,八种基本的数据类型

  如何解决写爬虫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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: