int与Integer,基本数据类型与包装类

今天在写po层看到公司po的数据类型都用int而不用Integer,就发起了提问?为什么用包装类不用Integer而用int呢,查阅资料,不外乎面试问道的回答比如:
1.int是基本的数据类型;
2.Integer是int的封装类;
3.int和Integer都可以表示某一个数值;
4.int和Integer不能够互用,因为他们两种不同的数据类型;
5.int类型是放在栈空间的,Integer是作为对象放在堆空间的;
6.int 是基本类型,不是类,为了符合面向对象编程,后来出现了Integer 类,他是对int进行封装的.
7.int不是对象,是java原始的数据类型,它默认值为0.
8.Integer是个对象,它有自己的方法,默认值为NULL。

问了下老板为什么用int而不用Integer,给了我一本书,查阅后总结了一下
一、基本数据类型是优于包装类的,效率远大于包装类
二,基本类型只有它们的值,而包装类型具有与其值不同的标识。换句话说,两个包装类型实例可以具有相同的值和不同的标识。
三、基本类型只有全功能值,而每个包装类型除了对应的基本类型的所有功能值外,还有一个非功能值,即 null。
四、基本类型比包装类型更节省时间和空间。如果你不小心的话,这三种差异都会给你带来真正的麻烦。
1.将 == 操作符应用于包装类型几乎都是错误的。
我们这里用Effective.java中的一个例子来阐述

Comparator<Integer> aComparator = 
				(i,j)->(i<j)?-1:(i==j?0:1);
		System.out.println(aComparator.compare(new Integer(42), new Integer(42)));

打印结果为1
2.在操作中混合使用基本类型和包装类型时,包装类型就会自动拆箱
例子:

在这里插入图片描述
这里并不是什么都不输出,而是报NullPointerException异常。问题在于,i 是 Integer,而不是 int 数,而且像所有非常量对象引用字段一样,它的初值为 null。当程序计算表达式 i==42 时,它是在比较 Integer 与 int。

总之,只要有选择,就应该优先使用基本类型,而不是包装类型。基本类型更简单、更快。如果必须使用包装类型,请小心!自动装箱减少了使用包装类型的冗长,但没有减少危险。 当你的程序使用 == 操作符比较两个包装类型时,它会执行标识比较,这几乎肯定不是你想要的。当你的程序执行包含包装类型和基本类型的混合类型计算时,它将进行拆箱,当你的程序执行拆箱时,将抛出 NullPointerException。 最后,当你的程序将基本类型装箱时,可能会导致代价高昂且不必要的对象创建。

最后总结一下什么时候用Integer
1.作为集合中的元素、键和值。不能将基本类型放在集合中,因此必须使用包装类型。
2.在参数化类型和方法中,必须使用包装类型作为类型参数,因为 Java 不允许使用基本类型。例如,不能将变量声明为ThreadLocal 类型,因此必须使用 ThreadLocal 。
3.在进行反射方法调用时,必须使用包装类型

参考资料:Effective.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值