`

基本类型优先于装箱基本类型

 
阅读更多

Java有一个类型系统由两部分组成,包含基本类型(primitive),如int、double和boolean,和引用类型(reference type),如String和List。
每个基本类型都有一个对应的引用类型,称为装箱基本类型(boxed primitive)。


Java 1.5版本中加入了自动装箱(autoboxing)和自动拆箱(auto-unboxing)。
int i = new Integer(1);
Integer j = 2;


基本类型和装箱基本类型之间的区别:
1、基本类型之后值,而装箱基本类型不仅有相同的值还可能具有不同的同一性,也就是装箱基本类型值相同不一定等号判断相等。
2、装箱基本类型有可能有null。
3、基本类型通常比装箱基本类型更节省时间和空间。


对装箱基本类型运用==操作符几乎总是错误的。


当一项操作中混合使用基本类型和装箱基本类型时,装箱基本类型就会自动拆箱。

 

[java] view plain copy
 
  1.     static Integer k;  
  2.   
  3.     public static void main(String[] args) {  
  4.         int i = new Integer(100);  
  5.         Integer j = 100;  
  6.         Integer g = 100;  
  7.         Integer f = new Integer(100);  
  8.         System.out.println(i == j);  
  9.         System.out.println(j == g);  
  10.         System.out.println(j == f);  
  11.         System.out.println(k == j);  
  12.         System.out.println(k == i);  
  13. //      后台打印:  
  14. //      true  
  15. //      true  
  16. //      false  
  17. //      false  
  18. //      Exception in thread "main" java.lang.NullPointerException  
  19. //          at HelloWorld49.main(HelloWorld49.java:13)  
  20.   
  21.     }  

最常举例的装箱和拆箱的错误应用:
反复自动拆箱装箱,影响性能。
Long sum = 0L;
for(long i=0;i<Integer.MAX_VALUE;i++){
sum += i;
}

 

什么时候应该使用装箱类型:

1:作为集合中的元素、键和值

2:在参数化类型中,必须使用装箱类型作为类型参数,因为java不允许使用基本类型

3:在进行反射的方法调用时,必须使用装箱基本类型

分享到:
评论

相关推荐

    springboot-demo:springboot学习

    Springboot--Studyspringboot-jpa-thymeleaf实现增删改查功能加入redis缓存(简单)2017-12-15 :整合Shiro2018-07-01 :Builder模式构造类2018-07-01 :要优先使用基本类型而不是装箱基本类型,要担心无意识的自动...

    数据结构与算法分析Java语言描述(第二版)

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....

    数据结构与算法分析-Java语言描述(第2版)_1_2

    java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....

    数据结构与算法分析_Java语言描述(第2版)]

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析 Java语言描述第2版

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析_Java语言描述(第2版)

    1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用Java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱 1.5.3 带有限制的通配符 1.5.4 泛型static方法 ...

    数据结构与算法分析C描述第三版

     10.1.3 近似装箱问题   10.2 分治算法   10.2.1 分治算法的运行时间   10.2.2 最近点问题   10.2.3 选择问题   10.2.4 一些算术问题的理论改进   10.3 动态规划   10.3.1 用表代替递归   ...

    JAVA基础课程讲义

    基本类型转化时常见错误和问题 33 方法 33 简单的键盘输入和输出 33 本章思考作业 34 上机操作 34 第二章(2) 控制语句 35 顺序结构 35 选择结构 35 if单选择结构 35 if-else双选择结构 35 If-elseif-else多选择结构 ...

    数据结构与算法分析

     10.1.3 近似装箱问题   10.2 分治算法   10.2.1 分治算法的运行时间   10.2.2 最近点问题   10.2.3 选择问题   10.2.4 一些算术问题的理论改进   10.3 动态规划   10.3.1 用表代替...

    美国..现代编译原理C语言描述.高清版

    19.2.1 深度优先生成树 310 19.2.2 半必经结点 311 19.2.3 Lengauer-Tarjan算法 312 19.3 使用SSA的优化算法 315 19.3.1 死代码删除 315 19.3.2 简单的常数传播 316 19.3.3 条件常数传播 317 19.3.4 保持必经结点...

    Java开发技术大全 电子版

    10.11.1不能使用基本类型326 10.11.2不能使用泛型类异常326 10.11.3不能使用泛型数组327 10.11.4不能实例化参数类型对象..327 10.12本章小结328 第11章集合329 11.1集合接口与抽象类329 11.1.1Collection接口...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    因为JAVA的自动装箱与拆箱机制,不需要根据场景来区分数据类型。 D .所有的局部变量推荐使用基本数据类型。 多选 12.关于索引的设计,下列哪些说法符合《阿里巴巴Java开发手册》:ACD A .对varchar类型的字段...

    【05-面向对象(下)】

    自动装箱就是把一个基本类型的变量直接赋给对应的包装类变量,自动拆箱 则与之相反。 •包装类还可以实现基本类型变量和字符串之间的转换,除了Character之外的所有包装类都提供了一个 parseXxx(String s)静态...

    数据结构与算法分析_Java_语言描述

    小结 练习 参考文献 第6章 优先队列(堆) 6.1 模型 6.2 一些简单的实现 6.3 二叉堆 6.3.1 结构性质 6.3.2 堆序性质 6.3.3 基本的堆操作 6.3.4 其他的堆操作 6.4 优先队列的应用 6.4.1 选择问题 6.4.2...

Global site tag (gtag.js) - Google Analytics