安卓 Int和Integer的区别之处,以及其他的八个区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fox_wei_hlz/article/details/74451918

我们来区别一下int和integer这个俩个的区别共同点:

共同点呢:1、都是整型

     2、范围值都是 -2147483648(-2^31) 至 2147483647(  2^31   -   1)是一样的(32位)

     3、其中使用equals比较的是值我们可以进入源码看一下其中的instanceof在java里面是表示这个实例类是否继承了后面跟的那个类,其中&&是作为判断,然后在继续的先是Object这个类在强转为Integer这个类,然后在进行比较他们的value的值。所以比较的是类型是否一样和值是否一样其中只有Integer这个有equals这个方法。

不同点呢:1、就是Integer有equals这个方法。int没有。

                    2、int的储存大小是4个字节

                                    3、int是JAVA缺省的8中基本数据类型之一,不是类。而Integer是一个类,继承Number和接口comparable<Integer>

    4、其中要注意的是 == 这个符号,两个对象==比较的是栈的值。在int里面没有影响~~,但是在Integer里面有不一样的表现(看下面:注释4)

注释4:Integer a = new Integer(2)看里面的源码可以知道

1、这个Integer这个类使用了构造方法的形式我们去调用它,自己会判断是不是Integer,不是话的对String类型进行转化为Integer类型。然后进行赋值新的value,这个时候不可能是一个类型了。而且我们对new的印象应该是开辟内存,其中的 a指的是堆里面的地址,所以俩个new的对象==的比较实际上面比较的比的是内存地址。所以必然是false。

2、Integer a =1 和Integer b = 1是一样的,因为new是开辟新的内存,而直接赋值不一定是开辟新的。但是要注意这个赋值的又一个阀门。也就是临界值。看源码一下,

其中的i在128和-128之间不进行new,就是没有进行开辟内存,那如果Integer a = 129和Integer b = 129是一样的吗?是不一样的。因为超过128这个临界值了,开辟了新内存。

3、Integer a = new Integer(4) 和 Integer b = 4也是一样的道理,所以是不一样的。这个是一个是指向堆的地址,一个是指向专门存放内存的地方。那么Integer a = new Integer(129)和Integer b = 129 这俩个也不一样,但是原理是俩个指向堆的地址是不一样的。

这样的话,基本上面就说完了,关于这一块的东西了。

二、现在来讲一下关于Short和short这俩个的区别和共同点:

共同点:1、都是短整型

                         2、其中他们的取值范围都是在-32768(  -2^15  )至32767(  2^15   -   1)(16位)其中我们可以看到源码里面的0x是16进制的表现,可以转化为10进制15(F)*16^0+15*16^1+15*16^2+7*16^3=32768(其中的F是15)

不同点:和上面的說的int和Integer一样的

三、关于long和Long

共同点:1、长整型

                         2、取值范围是 -9,223,372,036,854,775,808至 9,223,372,036,854,775,807(去源码看吧~~~~)64位

不同点:和上述一样

四、关于byte和Byte的

共同点:1、都是字节

                         2、范围都是-128至127(8位)

不同点:一样的

五:关于float和Float

      共同点:1、浮点型

      2、取值范围32位浮点1.40129846432481707e-45f至3.40282346638528860e+38f

不同点:使用的是compare比较大小

 六:double和Double

共同点:1、浮点型

                        2、64位浮点,一般非整数浮点可用这个。5e-324至1.79769313486231570e+308

不同点:使用的是compare比较大小

七:char和Character

共同点:1、是字节类型

2、char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符

其中在安卓源码的里面没有看到过Char这个东东。然后呢看到Character这个东东。继承了char这个玩意。

八:boolean和Boolean

boolean x =false;

Map map=new HashMap();

map.put("x", x);
Boolean x = (Boolean)map.get(t);

唯一只能使用Boolean上的就是从列表或者哈希表获取值时。

只能用Boolean强制转换,不能使用boolean.

九、String(不算基本数据类型) Stringbuffer、Stringbuilder(非线程安全)

1、不经常变化的字符串,使用String就可以。而经常变化、正在拼装的字符串不用String。

2、若是全局变量,可能多线程引用,建议使用StringBuffer;

3、若是局部变量,单线程使用,推荐StringBuilder。

4、 在编译阶段就能够确定的字符串常量,完全没有必要创建String或StringBuffer对象。直接使用字符串常量的"+"连接操作效率最高。
5、StringBuffer对象的append效率要高于String对象的"+"连接操作。

6、 不停的创建对象是程序低效的一个重要原因。那么相同的字符串值能否在堆中只创建一个String对象。

先写到这边吧。。。

展开阅读全文

没有更多推荐了,返回首页