一、java基础数据范例及其封装类
java数据范例有基础数据范例和援用数据范例,为了轻易将基础数据范例看成对象处置惩罚,java引入了基础数据范例相对应的封装类,如int封装类是Integer。
在线教授教养视频分享:java教授教养视频
二、java自动拆箱和自动装箱
1、自动装箱
自动装箱实在就是将基础数据范例转换为援用数据范例(对象)
2、自动拆箱
自动拆箱实在就是将援用数据范例转化为基础数据范例
代码以下:
public static void main(String[] args) { Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1); int b = a - 1;//对象不能直接举行盘算,所以这里有自动拆箱的操纵,将a对象转换成基础数据范例,然后-1 System.out.println(a); System.out.println(b); }
打印效果:
1 0
三、int和Interger的区分
从上面我们就能够看出int和Interger的区分:
int是基础数据范例,Integer是援用数据范例;
int默认值是0,Integer默认值是null;
int范例直接存储数值,Integer须要实例化对象,指向对象的地点。
说到这,是不是是以为就这么完事了,实在它们之间另有一些细节方面的区分:以下
public static void main(String[] args) { Integer a = new Integer(1); Integer b = new Integer(1); int c = 1; int d = 1; Integer e = 1; Integer f = 1; Integer g = 130; Integer h = 130; Integer i = new Integer(130); int j = 130; }
1:a == b 吗? 空话,一定不相称。两个new出来的对象地点不一样。
2:c == d 吗? 这个也是空话,都是基础数据范例的值一定相称。
3:如今的症结问题是 e == f 吗? g == h 吗?
答案是:e == f; g != h。
为何会涌现这类状况?由于ava在举行编译时 Integer g = 130会被编译成 Integer.valueOf(130) ,这个能够经由过程反编译class文件看到。而经由过程Integer源码能够得出,Integer.valueOf() 要领会在数值-128~127之间会对Integer举行缓存,不会再从新new一个,所以 e==f ;当数值二大于127或许小于-128的时刻则会从新new一个,所以g != h 。
Integer的valueOf要领以下:
public static Integer valueOf(int i) { //IntegerCache.low == -128 ;IntegerCache.high == 127 //当数值大于-128小于127时,举行缓存;不然从新new一个。 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
4:c == e 吗, i == j 吗?
答案都是相称的。由于封装类和基础数据范例举行比较的时刻,java会自动拆箱,然后比较数值是不是相称。
总结:
1、都是封装类,都是new出来的,一定不相称。由于对象的内存地点不一样。
2、都是封装类,都不是new出来的,假如值在-128~127之间,那就相称,不然不相称。
3、假如是封装类和基础范例举行比较,只需数值相称那就相称,不然就不相称。由于封装类和基础数据范例举行比较的时刻会有一个自动拆箱操纵。
4、都是基础数据范例,假如数值相称,那就相称;不然不相称。
想相识更多相干教程请接见:java入门
以上就是java中int与integer的区分的细致内容,更多请关注ki4网别的相干文章!