基本数据类型
基本数据类型
1 基本数据类型*
1.1 Java中的数据类型
Java中的数据类型分为两大类:基本数据类型和引用类型。
2.2 Java基本数据类型
Java中基本数据类型一共有4类8种分别是:
- 数据类型(byte short int long)
- 布尔类型(boolean)
- 字符类型(char)
- 浮点类型(float double)
2 整数类型
Java中整数类型一共有4种,用于存储各个范围的整数:
- byte(8位)
- short(16位)
- int(32位)
- long(64位)
2.1 byte类型
byte类型也称为字节类型,是java中最小数据类型,内部为8位2进制数字,一般用来表示内存中或者文件中的最小存储单元。
案例:
//byte 类型的使用
byte max=Byte.MAX_VALUE;//最大值
byte min=Byte.MIN_VALUE;//最小值
System.out.println(max);//127
System.out.println(min);//-128
byte b=120;
System.out.println(b);
byte b1=129;//编辑错误,129超过byte范围
2.2short类型
short类型是Java中存储整数数据范围比较小的数据类型,内部为16位2进制数字,程序中很少使用,Java的设计者为了保持与传统C语言兼容而设计了short数据类型。
案例:
//short 类型演示
short max=Short.MAX_VALUE;//最大值
short min=Short.MIN_VALUE;//最小值
System.out.println(max);//32767
System.out.println(min);//-32768
short s=12345;
System.out.println(s);
short v=32778;//编辑错误,超过stroy范围
2.3 int类型
int类型是java中最常用的整数类型,内部为32位2进制数字,非常实用,可以涵盖大多数整数用法。
int类型注意事项:
-
直接给出的整数常数称为整数“直接量”,Java所有整数“直接量”都是int类型。“整数直接量”不能超过int范围。
- 默认的整数直接量是10进制直接量,数字:0123456789
- 使用0x开头的直接量是16进制直接量,数字:0123456789abcdef
- 使用0开头的直接量是8进制直接量,数字:01234567
- 使用0b开头是直接量是2进制直接量,数字:01
-
整数不能存储小数
-
整数计算结果也是整数,并且除法结果是整除结果
-
整数计算时如果超过整数范围会自动溢出,溢出不会报错误
- 要了解整数范围,预估计算结果,如果可能溢出就要更换为long类型计算。
- 整数直接量也称为整数字面量
案例:
//int类型演示
int max=Integer.MAX_VALUE;//2147483647
int min=Integer.MIN_VALUE;//-2147483648
System.out.println(max);
System.out.println(min);
int a=1000000;//10进制直接量
int b=0x123ab;//16进制直接量
int c=0123;//8进制直接量
int d=0b110011;//2进制直接量
//默认的输出结果都是10进制整数
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
//int m=2000000000000;//编辑错误,超过int范围
//int n=0x12abk;//编辑错误,16进制0-9,a-f
//int k=01238;//编辑错误,8进制不能有8
//int i=0b100102;//编辑错误,2进制不能有2
int y=7/2;//3
System.out.println(y);//int类型除法计算结果是整除结果
int x=max+1;
System.out.println(x);//溢出为最小值
int l=min-1;
System.out.println(l);//溢出为最大值
2.4 long类型
long类型也称为“长整数”类型,内部为64位2进制数字,范围非常大,Java中没有比long类型再大范围了。开发中如果遇到int类型范围不够的时候就采用long类型进行计算。
long整数类型使用事项:
-
默认的整数类型是int类型,加了后缀"L/l"以后才是long类型直接量。
- 由于小写l与1容易混淆,直接使用L更好。
-
计算时Int不够采用long类型进行计算。
案例:
//long类型演示
long max=Long.MAX_VALUE;//最大值
long min=Long.MIN_VALUE;//最小值
System.out.println(max);
System.out.println(min);
long l=1234;//int类型10进制直接量
long n=23456122322344L;//long类型10进制直接量
System.out.println(l);
System.out.println(n);
long a=0x623efefefefL;//long类型16进制
long b=0723123232323L;//long类型进制
System.out.println(a);
System.out.println(b);
long x=Integer.MAX_VALUE;
long y=1;
long z=x+y;
System.out.println(z);
//常见错误案例:
long k=Integer.MAX_VALUE+1;//两个Int类型相加,结果也是int数据类型,此时Int已经溢出
System.out.println(k);
//可以修改为:
long k=Integer.MAX_VALUE+1L;//先转换后相加
System.out.println(k);
2.5 long表示时间
案例:
long now=System.currentTimeMillis();
long years=now/1000/60/60/24/365+1970;
System.out.println(now);
System.out.println(years);
3 浮点数类型
Java中利用浮点数类型存储“小数”,有两种数据类型:float和double。float是单精度浮点数,double是双倍精度浮点数。Java的浮点数采用的是"IEEE-754"标准。
3.1 float类型
采用32位2进制存储的浮点数,其中1位表示正负的符号位,8位存储指数,23位存储尾数。
使用浮点数:
-
float浮点数的直接量有两种写法:
- 通常写法:3.5F 88.68F,适合通常小数
- 指数形式:3.3452E100F或者1.234E-5F
-
默认的浮点直接量为double类型,如果需要表示float直接量,需要加"f"或"F"后缀,例如:float f1=3.14;会有编译错误,应该写成3.14f;
-
float不能精确表示10进制小数,保存数据时候存在尾数的舍入(四舍五入)误差
案例:
float f1=3.1415926535897;//编译错误,double不能转换为float
float f2=3.1415926535897f;
float f3=3.14E15f;
float f4=3.5-20f;
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
System.out.println(f4);
3.2 double类型
double是双倍精准浮点数,内部为64位2进制存储的浮点数,其中1位表示正负的符号位,11位存储指数,52位存储尾数。
使用double:
- 由于double表示的数据更精确,所以默认的小数直接量是double 类型,如:2.8 4.5
- double也支持指数形式赋值:double d=356.5E8
- 由于douvle精度高,计算更加精确,大多数场合使用double类型
- double也不能精确表示10进制小数,保存数据时候存在尾数的舍入(四舍五入)误差,相对于float来说更加精准。
案例:
double d1=3.1415926535897932384626433;
float f1=3.1415926535897932384626433F;
double d2=3.14E10;
double d3=3.14-10;
double d4=34D;
System.out.println(d1);
System.out.println(f1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);
3.3 浮点数的计算
有浮点数参加的数学运算称为浮点数运算,如果有一方不是浮点数则将其转换为浮点数再进行运算。
案例:
double x=1.0/3;
System.out.println(x);
double a1=2.6;
double a2=2.0;
double a3=a1-a2;
System.out.println(a3);
System.out.println(a3==0.6);//比较结果为false
double c=300000.0;//光速
double u=c*60*60*24*365*920000000000D;//可观测宇宙大小
字符类型
Java中字符类型char用于存储“字符数据”,Java字符类型采用16位2进制数进程存储,其有效范围0·65535,字符类型存储的字符是Unicode编码。具体编码参照http://www.unicode.org网站。
字符类型赋值:
- 字符直接量:形如“A”,其本质是一个字符整数编码
- 整形直接量:范围在0·65535之间的整数,数值对应字符的Unicode编码
- Unicode形式:形如’\u4e2d‘,Unicode字符的16进制形式
- 转义字符:不便输入的字符可以使用转字符
| 转义字符 | 含义 | 10进制编码 | 16进制编码 |
|---|---|---|---|
| \t | tab制表位字符 | 9 | \u0009 |
| \n | 换行符 | 10 | \u000A |
| \r | 回车符 | 13 | \u000D |
| ** | 反斜杠 | 92 | \u005C |
| \‘ | 单引号' | 39 | \u0027 |
| '' | 双引号" | 34 | \u0022 |
案例:
char c='A';
char ch='中';
char c1=20013;
char c2='\u4e2d';
char c3='\\';
char c4='\";
char c5='\"';
System.out.println(c);
System.out.println(ch);
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
5.布尔类型
boolean称为布尔类型,用于表达逻辑判断结果,只有两个值:true和false。
案例:
int age=18;
boolean iskid=age<=12;//true
boolean closed=true;
boolean running=false;
System.out.println(closed);
System.out.println(running);
6.数据类型转换
6.1 自动类型转换
Java中将小范围数据转换为大范围数据的转换称为自动数据类型转换,由于是自动发生,不需要明显的语法说明,故称为“隐式数据类型转换”。
案例:
int i=5;
long l=i;//自动类型转换,int转换为long
float f=3.4F;
double d=f;
double x=3+4.5;//整数3自动转换为double类型
6.2强制类型转换
将变量从大范围向小范围转换的时候,不能自动完成,需要利用强制转换运算符完成。
案例:
shrot s1=120;
byte b1=(byte)s1;//范围内的数据可以转换成功
System.out.println(b1);
shrot s2=150;
byte b2=(byte)s2;//超过有效范围会发生溢出问题
System.out.println(b2);
long l1=12389;
int i1=(int)l1;//范围内的数据可以转换成功
System.out.println(i1);
long l2=2389233332233L;
int i2=(int)l2;//超过有效范围会发生溢出问题
System.out.println(i2);
double d1=2.5;
float f1=(float)d1;//范围内的数据可以转换成功
System.out.println(f1);
double d2=1.0/3;
float f2=(float)d2;//会发精度损失
System.out.println(f2);
double d3=4333.28832;
long l3=(long)d3;//保留整数部分
System.out.println();

浙公网安备 33010602011771号