泰州网站制作价格,江苏高效网站制作机构,php网站开发实训感想,软件高端开发基本类型和包装类型之间有三个主要区别#xff1a; 1、基本类型只有值#xff0c;而两个包装类型可以具有相同的值和不同的同一性#xff08;值相同#xff0c;但是false#xff09; 2、基本类型只有功能完备的值#xff0c;而每个包装类型除了它对应基本类型的所有功能…基本类型和包装类型之间有三个主要区别 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 ComparatorInteger naturalOrder new ComparatorInteger() {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 ComparatorInteger naturalOrder new ComparatorInteger() {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 {//包装类型默认nullstatic 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基本类型默认0static int i;public static void main(String[] args) {if(i 42) {System.out.println(我错了嘛);}}
}
不会抛出任何异常
问那么我们什么时候用包装类型呢 答有三个合理的用处
1、作为集合中的元素、键和值。2、在参数化类型中必须使用包装类。3、进行反射的方法调用时必须使用装箱基本类型。
总之当可以选择的时候基本类型要优于包装类型。基本类型更简洁更快速。