我们来区别一下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对象。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
来源:CSDN
原文:https://blog.csdn.net/fox_wei_hlz/article/details/74451918