java 基本类型总结

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/u010173095/article/details/79378513

关于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 存在同样的问题

第三句不会报错,根据网上的说法是 += 隐含强转操作。

总结

目前就想到这么多,以后想到其它的再补充。

猜你喜欢

转载自blog.csdn.net/u010173095/article/details/79378513