在栈中可以直接分配内存的数据是基本数据类型。引用数据类型:数据的引用在栈中,但他的对象在堆中。
基本数据类型,小可转大,大转小会失去精度
第一类:逻辑型boolean
第二类:文本型char
第三类:整数型(byte、short、int、long) 第四类:浮点型(float、double)
整型有byte short int long char,分别用8、16、32、64、16bits表示。有些地方可能不会把char列入整型范畴,但本质上char类型是int的一个子集。
byte short int long都是有符号的,用2的补码(two‘s-complement)表示。而char用16位表示,它是无符号的,表示的是UTF-16编码集。
byte由1个字节8位表示,是最小的整数类型。主要用于节省内存空间关键。当操作来自网络、文件或者其他IO的数据流时,byte类型特别有用。取值范围为:[-128, 127].
short用16位表示,取值范围为:[- 2^15, 2^15 - 1]。short可能是最不常用的类型了。short类型参与运算的时候,一样被提升为int或者更高的类型。
Int 32 bits, [- 2^31, 2^31 - 1].有符号的二进制补码表示的整数。
Long 64 bits, [- 2^63, 2^63 - 1,默认值为0L].当需要计算非常大的数时,如果int不足以容纳大小,可以使用long类型。如果long也不够,可以使用BigInteger类。
Char 16 bits, [0, 65535], [0, 2^16 -1],从‘\u0000‘到‘\uffff‘。无符号,默认值为‘\u0000‘。Java使用Unicode字符集表示字符,Unicode是完全国 际化的字符集,可以表示全部人类语言中的字符。Unicode需要16位宽,所以Java中的char类型也使用16 bit表示。当char进行加减乘除运算的时候,也被转换成int类型,必须显式转化回来。
float使用32 bit表示,对应单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确。精度要求不高的时候可以使用float类型
double64为表示,将浮点子面子赋给某个变量时,如果不显示在字面值后面加f或者F,则默认为double类型。java.lang.Math中的函数都采用double类型。如果double和float都无法达到想要的精度,可以使用BigDecimal类。
boolean类型只有两个值true和false,默认为false。boolean与是否为0没有任何关系,但是可以根据想要的逻辑进行转换。
自动转换 较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。
强制类型转换 如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。
时间: 2024-10-09 18:23:01