Java 基本类型优先于包装类型,以及二者之间的选择
2017-09-04 14:30
239 查看
基本类型和包装类型之间有三个主要区别: •1、基本类型只有值,而两个包装类型可以具有相同的值和不同的同一性(值相同,但是==false) •2、基本类型只有功能完备的值,而每个包装类型除了它对应基本类型的所有功能值以外,还有个非功能值:null。 •3、基本类型通常比包装类型更节省时间和空间。 案例 (一) package demo.one; import java.util.Comparator; /** * 存在问题的实现方式 * * @author TongWei.Chen * @date 2017年3月21日21:08:11 */ public class BadDemoOne { //比较器,返回的数值到底是正数负数还是0,取决于他的第一个参数是小于等于还是大于第二个参数 static Comparator<Integer> naturalOrder = new Comparator<Integer>() { public int compare(Integer first, Integer second) { return first < second ? -1 : (first == second ? 0 : 1); } }; public static void main(String[] args) { System.out.println(naturalOrder.compare(new Integer(66), new Integer(66))); //1 } } 从结果可以看出,输出的居然是1,而不是0,原因在于first和second两个参数表示同一个int值,但是是不同的Integer实例。所以这个比操作会返回false,对包装类用==去比较几乎总是错的,建议包装类用equals去比较。 (二)解决上述问题 package demo.one; import java.util.Comparator; /** * 解决BadDemoOne方式 * * @author TongWei.Chen * @date 2017年3月21日21:08:11 */ public class GoodDemoOne { //比较器,返回的数值到底是正数负数还是0,取决于他的第一个参数是小于等于还是大于第二个参数 static Comparator<Integer> naturalOrder = new Comparator<Integer>() { public int compare(Integer first, Integer second) { int f = first; int s = second; return f < s ? -1 : (f == s ? 0 : 1); } }; public static void main(String[] args) { System.out.println(naturalOrder.compare(new Integer(66), new Integer(66))); //0 } } 强制在使用时让他拆箱成基本类型,结果输出正常,返回0。 (三) package demo.two; /** * 存在NullPointerException * * @author TongWei.Chen * @date 2017年3月21日21:26:28 */ public class Unbelievable { //包装类型默认null static Integer i; public static void main(String[] args) { if(i == 42) { System.out.println("我错了嘛?"); } } } 抛出NullPointerException,因为包装类型默认null (四)解决上述问题 package demo.two; /** * 解决NullPointerException * * @author TongWei.Chen * @date 2017年3月21日21:26:28 */ public class Believable { //int基本类型默认0 static int i; public static void main(String[] args) { if(i == 42) { System.out.println("我错了嘛?"); } } } 不会抛出任何异常 包装类型做运算操作比基本类型慢几十倍,参考我的另外一篇文章http://www.jianshu.com/p/54e5fa72d5b5 问:那么我们什么时候用包装类型呢? 答:有三个合理的用处 •1、作为集合中的元素、键和值。 •2、在参数化类型中,必须使用包装类。 •3、进行反射的方法调用时,必须使用装箱基本类型。 总之:当可以选择的时候,基本类型要优于包装类型。基本类型更简洁更快速。 作者:编程界的小学生 链接:http://www.jianshu.com/p/688a0c075fce 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- Java 基本数据类型与其包装数据类型以及字符串(String)之间的转换问题
- java中基本数据类型的包装类以及基本数据类型之间的转换
- Java中的单例、StringBuffer方法、基本数据类型的包装类以及权限修饰符(基础详解)
- 优先选择基本类型而不是基本类型的包装类型
- java基本数据类型、对应的封装类以及字符串之间的相互转换
- Java的基本数据类型之间的转换以及面试题
- Hibernate映射的基本操作 Java类型、Hibernate映射类型以及SQL类型之间的对应关系
- java中的常用类、Date和SimpleDateFormat类表示时间、java中基本类型和包装之间的转换
- Java_语法基础_优先选择基本类型
- 【java】 基本数据类型之间的转换
- JAVA中有关byte,int,long这些基本数据类型的存储方式以及负数在JAVA中的表示方式
- Java中的移位操作以及基本数据类型转换成字节数组【收集】
- hibernate——java类型、hibernate映射类型、以及SQL类型之间的映射关系
- java 自动装箱与拆箱 (基本类型与包装类型)
- 探索java基本类型和包装类型的使用运算符==进行比较的底层细节
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- java,c,c++ 语言之间基本数据类型的比较
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- java类型,hibernate映射类型以及SQL类型之间的对应关系
- 关于java基本数据类型之间的转换