基本数据类型(原生类、内置类型)8种:

整型(默认int):byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)

浮点类型(默认double):float(4个字节)、double(8个字节)

字符型:char

布尔型:boolean

另外有四种常用但不属于基本数据类型:数组、String、自定义类、接口。



数据类型转换有两种形式:1.隐式转换2.显式转换

隐式转换指从低级类型向高级类型的转换,系统将自动执行,我们不需要做任何操作的。那么什么算高级?什么算低级?占字节数大的属于高级,占字节数少的算低级。比如在整型中,int比short所占字节要多,那么我们在把short转为int时,系统可以自动转换。如:

int a;
short b=4;
a=b;
System.out.print(a);

我们可以这样理解,把一个能装2个鸡蛋的篮子short里的鸡蛋倒入和另一个能装4个鸡蛋的int篮子,这样做是绝对可行的,所以系统是自动执行。

显式转换(强制类型转换)指高级类型向低级类型转换,格式:(类型名)要转换的值

如果把int篮子里的鸡蛋倒入short篮子这个时候就会出现编译错误,需要进行显式转换的书写,如下:

int a=4;
		short b;
		b=(short) a;
		System.out.print(b);

在这时需要注意一点,short的数值范围是:-32768 - 32767,而int范围是-2147483648-2147483647,如果我们给int赋一个大于short最大值而小于int最大值时,比如40000,然后再进行显式赋值给short,这时运行系统比过不会报错,输出的short值并不是之前int的值,精度已经丢失,所以我们一定要注意!



long型(8字节)为什么能自动转成float型(4字节)

刚才在整型之间转换时举了一个鸡蛋和篮子的例子,但是我们发现,如果整型转浮点型时,那么哪个是高级,哪个是低级呢?难道还是要看字节数吗?答案是不是的。在这里,我们把浮点型作为高级,整型作为低级的,也就是说,即使是8个字节的long型转4个字节的float型,那么我们也不需要显式转换,那么这是为什么呢?

这是因为二者在内存中的存储形式不同。

long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。

float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:V=(-1)^s * M * 2^E,浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。其中第1位,符号位,即S。接下来的8位,指数域,即E。剩下的23位,小数域,即M,M的取值范围为[1,2)或[0,1)。也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大。 这也就是为什么在数据转换的时候,long类型转换为float类型的根本原因所在。



字符型与整型之间的相互转换

我们没有能将char型一步转为整型的方法,需要先转为String型进行过渡,然后再从String转为整型。

char ch='2';
		int a;
		a=Integer.parseInt(Character.toString(ch));
		System.out.println(a);

运行结果:2

整型转为char型:

int a=22;
		char[] ch;
		String b=String.valueOf(a);
		ch=b.toCharArray();
		for(char c:ch){
			System.out.println(c);

运行结果:2

                    2



char转String小技巧
String str;
char ch ='a';
str=ch+"";

在char变量后直接加“”即可转换为String哦~。