Java入门第9课——基本数据类型

本文详细介绍了Java的8种基本数据类型,包括int、long、double、char和boolean等,讲解了它们的存储空间、使用场景以及转换规则。特别强调了int类型的范围、long类型的运用、double运算时的舍入误差问题和char类型的Unicode编码。此外,还讨论了类型间的转换,包括自动转换和强制转换可能带来的精度损失和溢出问题。
摘要由CSDN通过智能技术生成

1.1 8种基本数据类型

1.1.1 8种基本数据类型

    · Java语言有8种基本数据类型,分别用于存储整数、浮点数、字符数据和布尔数据类型。

image.png

8种基本数据类型(续1)

    · Java 8种基本类型的存储空间和使用场景如下表所示:

类型名称字节空间使用场景
byte1字节(8位)存储字节数据(较常用)
short2字节(16位)兼容性考虑(很少使用)
int 4字节(32位)存储普通整数(常用)
long8字节(64位)存储长整数(常用)
float4字节(32位)存储浮点数(不常用)
double8字节(64位)存储双精度浮点数(常用)
char2字节(16位)存储一个字符(常用)
boolean1字节(8位)存储逻辑(true、false)(常用)

1.2 int类型

1.2.1 int类型

    · int是最常用的整型类型。一个int类型的变量占用4个字节(32位),最大表示范围为:-2^31~2^31-1,即-2147483648~2147483647。

1.2.2 整数直接量是int类型

    · 所谓整数直接量(literal)就是直接写出的整数。

    · 例如:下面的语句中,100就是直接量。

     int a=100;

    · 关于整数直接量,需要注意如下要点:

        整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误。

        - 除了通常的十进制书写形式,整数直接量也经常写16进制的形式(以0X或0x开头)或8进制的形式(以0开头)。

整数直接量是int类型(续1)

int a=100000;//10进制
int b=0x186a0;//16进制
int c=0303240;//8进制
    
//编译错误,因为整数直接量超过了整数的范围
int d=1000000000;

    10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。

1.2.3 整型数据的除法运算中的取整

    · 两个整数相除,会舍弃小数的部分(不是四舍五入),结果也是整数。

int c=5/3;
System.out.println(c);//c的值为1
    
int total=87;
int error=23;
int percent=error/total*100;
System.out.println(percent+"%");
//结果为0%,23除以87整数部分为0
percent=100*error/total;
System.out.println(percent+"%");
//结果为26%,230除以87整数部分为26

1.2.4 运算时要防止溢出的发生

    · 整数运算的溢出:两个整数进行运算时,其结果可能会超过整数的范围而溢出。正数过大而产生的溢出,结果为负数;负数过大而产生的溢出,结果为整数。

int a=2147483647;
int b=-2147483648;
a=a+1;
b=b-1;
System.out.println("a="+a);
System.out.println("b="+b);

    输出结果:a=-2147483648 溢出,错误,b=2147483647 溢出,结果错误

1.3 long类型

1.3.1 long类型

    在表示整数时,如果int类型的范围不够,可以使用long型,一个long型的变量占用8个字节(64位),最大表示范围为:-2^63~2^63-1,即-9223372036854775808~9223372036854775807。

    如果要表示long直接量,需要以L或l结尾。

long a=10000000000;//会有编译错误
long b=10000000000l;

1.3.2 使用long类型进行较大整数的运算

    · 对于较大的整数运算(超过int的表达范围),可以使用long型。

long distance1=10000*365*24*60*60*299792458l;
//必须有一个long型数据参与的运算结果才是long型
System.out.println("distance="+distance1);
//distance1=547836957965889536 结果正确
    
long distance2=10000*24*60*60*299792458;
System.out.println("distance2="+distance2);
//distance2=-1973211136溢出

1.3.3 通过时间毫秒数来存储日期和时间

    · JDK提供System.currentTimeMillis()方法,返回1970年1月1日零点到此时此刻所经历的毫秒数,其数据类型为long,该方法经常用于计时操作。

long time=System.currentTimeMillis();
System.out.println(time);
//输出的结果为:1383835712828

1.4 double类型

1.4.1 使用double进行浮点数的运算

    · 浮点数,就是小数,包括:float和double

    · double类型的精度值是float类型的两倍,这正是其名称(双精度)的由来。

    · 大多数场合使用double表示浮点数。

double pi=3.14;
double r=8;
double s=pi*r*r;
    
System.out.println("s="+s);
//输出的结果为:s=200.96

1.4.2 浮点数直接量是double类型

    · 浮点数的直接量有两种写法:

        通常写法,如3.14、314、0.1、.5。

        科学计数法,如:1.25E2、1.25e2、1.25E-2。其中,1.25E2表示1.25乘以10的2次方。

    · 默认的浮点直接量为double型,如果需要表示float类型的直接量,需要加"f"或"F"后缀。例如

       float f1=3.14会有编译错误,应该写成3.14f

1.4.3 double运算时会出现舍入误差

    · 2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样。

    · 所以,2进制表示10进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。

double money=3.0;
double price=2.9;
System.out.println(money-price);
//输出的结果是:0.100000000000009

    如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal类来实现。关于这一点,将在后续的章节中介绍。

1.5 char类型

1.5.1 char类型

    · 字符类型事实上是一个16位无符号整数,这个值是对应字符的编码

    · Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位

    · 字符直接量可以采用诸如:'中'的形式,也可以采用16进制的表示形式,例如:'\u4e2d'

char c1='中';//c1中存的是"中"的编码
char c2='\u4e2d';
System.out.println(c1);
System.out.println(c2);

    '4e2d'为'中'所对应16位Unicode编码的16进制表示形式。

1.5.2 对char型变量赋值

    · 在对char型变量赋值时,可以采用如下三种方式:

        字符直接量:形如'A',变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符。

        整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。

        Unicode形式:形如'\u0041',Unicode字符的16进制形式。

char c1=65;
char c2='A';
char c3='\u0041';

1.5.3 使用转义字符

    · 对于不方便输出的字符采用转义字符表示,例如:

转义字符含义
'\n'表示回车符
'\r'表示换行符
'\\'表示反斜杠(\)
'\''表示单引号(')
'\"'表示双引号(")
char c='\\';
System.out.println(c);//输出的结果为:\

1.6 boolean类型

1.6.1 使用boolean变量进行关系运算

    · boolean类型适用于逻辑运算,表示某个条件是否成立。一般用于程序的流程控制。

    · boolean类型只允许取值true或false,true表示条件成立而false表示条件不成立。

    · boolean型变量经常用于存储关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系。

int age=18;
boolean isChild=age<16;//isChild的值为false
System.out.println(isChild);
boolean running=true;
boolean closed=false;

1.7 类型间的转换

1.7.1 基本类型间转换

    · 不同的基本类型直接可以相互转换:

        自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。类型的大小关系如下图所示:

image.png

        强制转换:从大类型到小类型需要强制转换符:

           (需要转换成的类型)变量

             但这样转换有可能会造成精度损失或者溢出。

1.7.2 强制转换时的精度丧失和溢出

    · 基本类型转换示例,注意强制转换时可能会造成的精度丧失和溢出。

int a=100;
int b=200;
long c=a+b;//自动将int转换为long

long l1=1024l;
int i=(int)l1;//需要加强制转换符由于1024在int的范围内没有产生溢出
    
long l=1024L*1024*1024*4;
int j=(int)l;//会产生溢出
System.out.println(j);//结果为:0
    
double pi=3.1415926535897932384
float f=(float)pi;//会造成精度的损失
System.out.println(f);//结果为:3.1415927

1.7.3 数值运算时的自动转换

    · 多种基本类型参与的表达式运算中,运算结果会自动向较大的类型进行转换:

//由于有long型的直接量参与,整个表达式的结果为long
long distance=10000*365*24*60*60*299792458l;
//由于有double型的直接量599.0参与
//整个表达式的结果为double
double change=800-599.0;
    
double persent1=80/100;
//结果为0.0,右边都是int型数据运算结果也是int类型,结果为0,
//再赋值给double型,将0转换为0.0
    
double persent2=80.0/100;
//结果为0.8,右边表达式有double型直接量参与,运算结果为double型

1.7.4 byte、char、short转换为int

    · byte、char、short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:

        int直接量可以直接赋值给byte、char和short,只要不超过其表示范围。

        byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算。

关注公众号,获取学习视频

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猴子学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值