您的位置:首页 > 编程语言 > Java开发

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
相关文章推荐