关于java基本类型的内容,看了无数遍,但是有时候还是会想不起来,还是写写博客加深一下记忆。
java的数据类型:
– 引用类型
– 基本类型
基本类型
有4类8中
字符型:char
布尔型:boolean
整数型:byte、short、int、long
浮点型:float、double
ps:我总是把byte类型忘记
8中基本类型的字节数
byte:1字节
short:2字节
int:4字节
long:8字节
float:4字节
double:8字节
那char类型占几个字节?
网上百度一下,发现是2个字节;
因为大多数汉字都是两个字节,所以验证一下:
char a = '我';
确实没有报语法错误。
boolean又占几个字节?
这个暂时确定不了。
单精度和双精度的问题
java程序员都知道float是单精度,double是双精度,可是单精度和双精度有什么区别呢?
看知乎大神的回答,总而言之双精度比单精度更精确,但是都是精确数值,不是准确数值。
所以就出现了一个问题,0.5f 等于0.5d,0.6f 确不等于0.6d的现象。
自动装箱和拆箱
自动装箱和拆箱说的是基本类型的一种现象,如下所示:
Integer b = 10;
int c = b;
在代码中可以直接这样写,不需要通过某个方法相互转化。
运算类型转换问题
int s = 1;
s = s + 1L; //编译报错
s += 1;
中间这句代码编译报错,是因为java中进行运算,类型会自动专程类型较大的那个,所以这句代码计算结果是2L(long),2L想要专程int,需要强转才可以。
基本类型与包装类型比较问题
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
比较结果:
true
false
结果即不是都是true,也不是都是false;
原因是因为,在Integer自动装箱实例化对象的时候使用的是下面的方法:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
从代码上可以看出来,只要不超过IntegerCache.low(-128) 和 IntegerCache.high(127)的范围,相同大小的数值返回的是同一个对象,所以第一个比较是true,第二个比较是false;
但是如果Integer和int比较,就不存在这个问题了
System.out.println(f3 == 150);//结果是true
long 存在同样的问题
第三句不会报错,根据网上的说法是 += 隐含强转操作。
总结
目前就想到这么多,以后想到其它的再补充。