最近在看Java的一些知识,随手写写~如有不足或错误,欢迎大神指出~
一,基本类型
Java的数据类型可分为基本类型和引用类型,此处只讨论基本类型。
Java的基本数据类型和C语言比较相似,主要可以分为四类八种,有整数类型(byte,short,int,long)、浮点类型(float,double),字符型(char),布尔类型(boolean)。Java当中的整数类型都是带符号的,从负数到正数,没有unsigned。Java的跨平台性在于其数据类型有固定的字段长度和表述范围,不受系统和平台的影响。比如C语言的整数类型在编译完成后放在Linux系统当中可能会由于数据太大而出现数据溢出,而Java则不会。
byte
byte是Java中最小的整数类型,占一个字节,8位。也就是说一个byte的数据容量为-128~127,超过此区间的所有赋值操作对于byte来说都是无效的,编译时是无法通过的,例如byte b = 300,编译器就会报错。还有一点,Java当中整数的默认类型都为int,而浮点类型为double,比如123,默认为int,1.23默认为double。
short
short占2个字节,16位。即一个short的数据容量为-2^15~2^15-1,short在Java中比较少见,因为它的地位比较尴尬,小数据可以用byte,超过byte则基本都有int类型解决。
int
int占4个字节,32位,即一个int的表数范围为 -2^31~2^31-1,上文提到Java当中整数类型默认都为int类型,比如int i = 666,或者long l = 888888888,注意,虽然你声明了long类型,但如果不在数据后加L或者l时,编译器也会默认为是int类型而出现编译错误,所以正确的表达式为long l = 888888888L;
long
long占8个字节,64位,即一个long类型数据的表数范围为 -2^63~2^63-1,一般情况如果数据较大,超出int表数范围,则使用long类型。
float
float占4个字节,32位,表数范围-3.403E38~3.4.3E38,非常大,可以不用精确记忆,当然,精度要求不高的时候可以使用float,精度要求高时使用double。定义一个float时比如,float f = 12.3f,必须在后边加f声明,否则编译器会默认为是double而报错。
double
double占用8个字节,64位,表述范围-1.798E308~1.798E308,,10的308次方个0,好大- -,数0都要数半天,非常精确了。
char
char属于字符类型,属于数据类型的原因是Java中char采用Unicode统一编码(全球语言统一编码),全世界所有的语言都可以使用char表达出来,例如char aChar = ‘A’;、char bChar = ‘中’;,每个字符占用2个字节,所以char类型可用16进制表达出来,如char cChar = '\u0016';
boolean
布尔类型,在Java当中只有true和false,没有0和1,一般用于条件判断。
二,类型转换
在使用数据的过程中经常需要定义各类变量,而他们的类型通常又是各不相同的,所以在进行运算或调用的过程中需要进行类型转换,而转换所遵循的依据则分为两种,一种是自动转换,顾名思义由编译器完成;另一种是强制转换,在数据前加转换符(typed)完成。 boolean类型不参与转换。
容量小的转换为容量大的数据时自动转换,转换时遵循大小顺序为:byte/short/chart->int->long->float->double
比如 int i; byte b = 120; i = b;此时将byte b 转换为int i 时,由于是大容器装小数字,所以编译会自动转换且不会损失精度;long l = 456745L;float f; f = l;(此处看到有些地方说会出现精度损失,比如long->float,不太明白)。
容量大的转换为容量小的数据时强制转换,加强制转换符,会造成精度损失;
比如 byte b; int i = 250; b = (byte)i;若不加强转符,可以试想一下,你一顿饭只能吃2碗,有人强迫你吃10碗,这后果我就不说了~而如果加了强转符,就好像此时还是要你吃10碗饭,但是有一种科技可以实现10碗饭的能量压缩到2碗,你就可以吃的下了。但是这两者的区别就在于你终究没有吃10碗,只能是约等于。所以大容量数据转小容量时会无法避免的出现精度损失。尤其是浮点类型转整型时,强转会将小数点后的数字全部截掉,只保留整数部分。
网友评论