数据类型一些整理及分类
目录
一、8大基本数据类型
1、字节型
字节型 ,单位:byte, 长度: 1,取值范围:-128~127 2的7次方
字节由8位的二进制组成
Byte s1=00000001;
System.out.println(s1);//1
进制转换
2进制转10进制
整数二进制用数值乘以2的幂次依次相加
10010111
十进制=151
1*2^7+0*2^6+0*2^5+1*2^4+0*2^3+1*2^2+1*2+1*2^0
PS:末尾位是2的零次幂,所以是1
10进制转2进制
以54为例,步骤如下:
54/2=27.......0
27/2=13.........1
13/2=6............1
6/2=3............0
3/2=1............1
1/2=0............1
则54(十进制)=110110(二进制)
2、短整型
短整型 ,单位:short, 长度: 2,取值范围:-32768~32767 2的15次方
short 短整形 最大为32767(5位)
short a1=32767;
System.out.println(a1);//32767
3、整型
整型 ,单位:int, 长度: 4,取值范围:-2147483648~2147483647 2的31次方
//int 整形 最大为2147483647(10位)
int a2=2147483647;
System.out.println(a2);//2147483647
4、长整型
长整型 ,单位:long, 长度: 8,取值范围:-9223372036854775808L~9223372036854775807L 2的63次方
long 长整型 最大为9223372036854775807L(16位)
long a3=922337203685477580L;
System.out.println(a3);//922337203685477580L
5、单精度浮点型
单精度浮点型 ,单位:float, 长度: 4,取值范围:+/-3.4E+38F(6~7 个有效位)
float 单精度浮点型 最大小数点8位
float a4=0.12345678F;
System.out.println(a4);//0.12345678
6、双精度浮点型
双精度浮点型 ,单位:double, 长度: 8,取值范围:+/-1.8E+308 (15 个有效位)
//double 双精度浮点型 最大小数点16位
double a5=0.1234567890123456;
System.out.println(a5);//0.1234567890123456
7、字符型
字符型 ,单位:char, 长度: 2,取值范围 ISO单一字符集
char 占用2位,可以直接赋值一个 字母、数字、中文、或者一个数字范围0~65565
赋值数字范围时,每个数字代表一个字符
char a6='陈';
char a7='c';
char a8='1';
char a9=6556;
char a10=99;
System.out.println(a6);//陈
System.out.println(a7);//c
System.out.println(a8);//1
System.out.println(a9);//ᦜ
System.out.println(a10);// c
System.out.println(a7==a10);// true
8、布尔型
boolean 布尔类型 大小1字节 true/false
二、 引用类
1、常用引用类
包装类(Byte、Short、Integer、Long、Float、Double、Boolean)
与八大基本数据类型一致,一一对应的包装类
Byte b=new Byte("001");
System.out.println(b);//1
Short s=new Short("32767");
System.out.println(s);//32767
Integer s=new Integer("2147483647");
System.out.println(s);//2147483647
Long s=new Long("9223372036854775807");
System.out.println(s);//9223372036854775807
Float s=new Float("0.12345678");
System.out.println(s);//0.12345678
Double s=new Double("0.1234567890123456");
System.out.println(s);//0.12345678
Boolean s=new Boolean("true");
System.out.println(s);//true
Character s=new Character('a');
System.out.println(s);//a
、枚举类、String类、Object。。。。
2、引用类的使用方式
1、强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。
当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,
也不会靠随意回收具有强引用的对象来解决内存不足的问题。
ps:强引用其实也就是我们平时A a = new A()这个意思。
2、软引用(SoftReference)
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;
如果内存空间不足了,就会回收这些对象的内存。
只要垃圾回收器没有回收它,该对象就可以被程序使用。
软引用可用来实现内存敏感的高速缓存
3、弱引用(WeakReference)
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
4、虚引用(PhantomReference)
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。
三、数据类型转换
1、隐式转换(自动类型转换)
以下类型左到右,直接转换,不会出现报错提示
数值型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。
注:
float 和 double 相加会增加小数点,float转成double会有值的增加(不建议这么玩)
char 类型比较特殊,char 自动转换成 int、long、float 和 double,
但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。
float a1=10.1f;
int a2=2;
double a3=10.2;
int a4=2;
System.out.println(a1*a2);//20.2
System.out.println(a3*a4);//20.4
System.out.println(a1*a2+a3*a4);//40.60000076293945
2、显式转换(强制类型转换)
这种转换不会自动进行,因为 double 型的变化范围比 int 型的要小。
这种转换有使成为“缩小转换”,因为你肯定要将源数据类型的值变小才能适合目标数据类型。
所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换
转换方式:(type)variableName
int a=3;
double b=5.0;
a=(int)b;
大转小会造成精度丢失(不建议这么玩)
参考
http://c.biancheng.net/view/796.html