在Java中有八种基本数据类型,它们和对象不同,是在栈中直接存放数据,并且可以就行比较。


布尔型:

boolean 取值范围:true、false 默认值:false


字符型:(默认值是‘\u0000’) 四位表示法 每一位表示一个16进制数,所以共16位 2个字节

char 占两个字节 以Unicode方式存储,可以保存全世界任何字符

因此两个字节的char值本质上存储的是Unicode码,所以对char变量进行赋值就有三种方式:

char c='q';
System.out.println(c);
c='\u0071';
System.out.println(c);
c=0x71;
System.out.println(c);


这三种方式效果一样,注意当为char赋值为整数时,可以是十进制、八进制或者十六进制,然后换算结果为十六进制得出的对应字符就是char会输出的字符


当用十进制整数赋值时,最大值为65535,如果赋值65536,就会编译报错,整数无法转化为字符,原因就是在Unicode中65536没有对应的字符

报的错误:cannot convert from int to char


整数型:(默认值都是0)

byte 一个字节 8位 

short 两个字节 16位

int    四个字节 32位

long  八个字节 64位


浮点型:(默认值是0.0)

float 四个字节 32位

double 八个字节 64位


在给基本数据类型赋值时,如果超出可接受范围,就会编译报错。这也是Java能写出健壮程序的原因,很多错误在编译时期就提醒程序员解决。


//1.我们可以这样理解,在基本数据类型转换过程中,由于Boolean类型特殊,所以不参与转换
		//2.其他七种基本类型,byte--short--int--long--float--double可以从小到大自动转换
		//3.char就比较特殊,因为char没有负数,所以byte和short无法自动转换为char,只能强制类型转换,否则会报错
		//4.从大到小转换只能强制类型转换,这样可能会丢失精度,所以如果不强制只能报错
		//5.但是如果右边赋值的是具体的值,而不是变量,那么就会根据范围进行判断,如果范围允许,则不报错,否则就会报错
		//6.当范围不允许导致报错时,我们如果对其强制类型转换,则编译不会报错,但这样可能会丢失精度
		//7.而且赋值的时候,整数默认是int,如果超出int类型范围,必须显式声明为long,也就是后面加上l或者L
		//8.同理,浮点型默认是double,如果要使用float,则在后面加上f或者F,如果不加就会立即报错,因为浮点型即使0.0float和double也不一样