基本类型和引用类型
分为基本类型和引用类型
基本类型就是四类八种
引用类型就是变量,存储在堆内
Person对象有一个为int类型的属性,这个属性也是放在堆中的
当==两边是基本数据类型时,==于比较的是两边的两个值是否相等,当==两边是引用类型时比较的是两个内存地址。.equals()是比较值
基本类型
四类八种:
整型的范围:
int为例
-(2^31)~(2^31-1)
4个字节,一个字节8位,共32位
符号占一位,剩下31位,最大值为2的31次方减1(31位全为1的情况,等于32位为1再减去1,注意32位为1表示2的31次方,正如1位为1表示2的零次方)
负数多表示一个数是因为,0不需要两种表示方式,10000000这样就用来表示最小值
int在32位环境中,取值范围为-2147483648~2147483647。
即-(2^31)~(2^31-1);第一,为什么是31次幂而不是32次幂?因为有一位是符号位,代表正负。第二,为何最小值为-2147483648而最大值为2147483647?因为最大值为01111111 11111111 11111111 11111111等于2^31-1,而00000000表示0,10000000就可以不用表示0,用来表示最小值。故最小值用补码可以表示成10000000 00000000 00000000 00000000;
小数默认为double,如果要float的话,float a=1.1f;
char默认4位,Unicode编码,写成16进制就变成了常见的u2A13这种
浮点数问题:
类型转换
转换:
将一种类型的值赋值给另一种类型是很常见的
将6种数据类型按下面顺序排列一下:
double > float > long > int > short > byte
如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制转换。
自动转换:
除了整数转小数,不会有精度损失
不会出现任何运行时(run-time)异常。
强制转换
把大的转成小的
(target-type) value;
如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。例如a=256超出了byte的[-128,127]的范围,所以将257除以byte的范围(256)取余数得到b=1;需要注意的是,当a=200时,此时除了256取余数应该为-56,而不是200。
将浮点类型赋给整数类型的时候,会发生截尾(truncation)。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。