数据类型可以分为两种:引用数据类型和基本数据类型
这里我要讲的是基本数据类型
基本数据类型分为八种:byte short int long float double Boolean char
内存里占用的空间单位有[bit B(字节) KB MB GB TB PB EB ZB ]
其中bit转化为B的换算率为8:1,其余都是1024:1
每种基本数据类型占用的空间是不一样的,下面就是每种类型的占用空间:
类型 | B(字节) | bit(位) |
byte | 1 | 8 |
short | 2 | 16 |
int | 4 | 32 |
long | 8 | 64 |
float | 4 | 32 |
double | 8 | 64 |
boolean | 1(非0即1) | |
char | 2 | 16 |
又可以分为浮点型,整型,字符型,布尔型
浮点型:(float,double)
float:在定义变量的时候要在值后面F
double:定义变量不用加F,因为小数点默认位double类型
float x = 10.3F;//在值后面F也可以加f
double y = 10.3;//不用加F
字符型:(char)
char:在java中任何一个元素都只占16位,因为在Java编码中一个汉字占两个字节,一个英文占一个字节为了统一Java中char类型占2个字节,而在windows操作系统不一样一个一个英文占8位,一个汉字占16位
char a = 'A';
char b = '我';
char c = 'ab';//这个是错误的!!char只能放一个字符元素
布尔类型:(boolean)
boolean:就只有1bit也就是一位即0或1,但是不能想成对与错,这是不对的,布尔类型表达的应该是非0即1,(不是这个就是那个)
boolean x = true;
boolean y = false;
整数型:(byte,short,int,long)
在前面表格中已经描述了这些整数型的占用空间,这里就不在重复。这里要讲的是计算机中对于整数型的取值范围
我们知道整数有正有负,整数类型的变量也不例外。那么计算机中如何判断一个数是正数还是负数呢?
这时符号位就诞生了即把第一位当成符号位(正数为0 负数为1 )所以有效空间要减1位
比如byte类型占8个字节
所以byte的有效存储大小为-2^7~2^7-1也就是-256~255
下面是一个重点:
我们要根据变量可能的取值区间,选择最小的变量类型范围
打个比方:一个人的年龄最多不超过200岁,但是你用int类型或者更高的类型来存放年龄这显然是不合理的,而且空间的利用率也会变低
前面讲了各种数据类型,我们就有疑问一个int类型的变量能否被一个byte类型的变量接收呢?下面就是关于类型转换问题
类型转换问题:
我们如果试图用空间容量较小的类型接收空间容量较大的类型就会出现类型转换问题
a.如果同为整数类型:
小空间接收大空间会出现类型转换问题
大空间接收小空间或平级接收不会出现问题直接接收
解决方案是:强制类型转换(多余的位直接砍掉,有可能会出现数据丢失)
int x = 20;
byte y = 10;
y=(byte)x;//小接收大,需要类型转换
x=y;//大接收小,,不需要类型转换
b.如果为浮点类型:同整型类型
c.跨类型:
float里只有24位整数部分,8位小数部分
double里只有48位整数部分,16位小数部分
整型接收浮点型或浮点型接收整型考虑的是精度:小数的精度高于整数的精度,有些值太长会采用科学计数法
高精度接收低精度或同级不需要类型转换
低精度接收高精度需要强制类型换
int转化为float (3->3.0)
int x = 10;
float y = 11.2f;
double z = 12.3;
x=(int)y;//低精度接收高精度,强制类型转换
System.out.println(x);//11
y=(float)z;//低精度接收高精度,强制类型转换
System.out.println(y);//12.3
d.char类型:Java编码是unicode码 16位 范围是0~65535
char转化为int会变成unicode码
int转化为char需要强制类型转换(int 32位 char 16位 小接受大)
char x = 'A';
int y = x;//int类型接收char类型,转化为unicode码
system.out.println(y);//65
x=(char) y;//char接收int类型,强制类型转换
System.out.println(x);//A
希望上面这些知识点能对你们有所帮助,本人第一次写博客有错误望谅解,我会改善!!!谢谢!!!