`

java中的Boxing和unboxing

阅读更多

邢红瑞 发表于 2007-6-8 16:00:58

最近给替一个朋友出的几道java的面试题,主要是面试java高级工程师,报酬就是晚饭,已经沦落的卖艺的境地。
题目很简单
   Integer i1 = 100;
   Integer i2 = 100;
   Integer i3 = 1000;
   Integer i4 = 1000;
   System.out.println(i1==i2);
   System.out.println(i3==i4);
很遗憾,没有一个答对的,正确答案是
true
false
如果面试者写这样的写是错误的,就算通过。
这个的原因要从java5的Boxing和unboxing谈起,boxing就是封装基本类型的对象,unboxing就是转换对象到基本类型。
Integer, Long, Float, Double, Short, Character etc.都是这样的类型他们是immutable。
Boxing
在jdk1.4.2中,
必须是// Assigning primitive type to wrapper type
   Integer iWrapper = new Integer(10);
java5中
 // Assigning primitive type to wrapper type
   Integer iWrapper = 10;
unboxing
在jdk1.4.2中,
int iPrimitive = iWrapper.intValue();
java5中
int iPrimitive = iWrapper;
下面是基本类型作为对象存储的范围,
boolean values true and false
All byte values
short values between -128 and 127
int values between -128 and 127
char in the range \u0000 to \u007F
如果int values between -128 and 127,VM使用相同的对象,否则创建新的对象。
所以这段代码,大家不要奇怪
System.out.println(0L == 0);
System.out.println(((Long)0L).equals(0));
第二行代码是0不等于0
因为大家犯这样的一个错误
 static private final String LOCK = "LOCK";
  void testMethod() {
    synchronized(LOCK) {
    ...
    }
  }
应该用new,不要直接=,对于int,最好使用int a[0] ,因为array也是对象,不像Integer,a[0]的值可以改变。



坏男孩 2007-06-12 22:39 发表评论
分享到:
评论

相关推荐

    XinYe95#Java-Learning#64. 自动装箱和拆箱(Auto-boxing & Unboxing)1

    1. 自动装箱: 2. 自动拆箱: 3. 缓存问题

    boxing-unboxing-java-perf:在 Java 中展示 BoxingUnboxing 性能的基准测试

    装箱/拆箱与封装:Java 的Map<Something> 问题:我想要一个将整数存储为其值的映射。 现在我有两种方法: 使用任何东西作为键和Integer (非原始整数)作为值,或使用任何东西作为键和一个包含int (原始整数)作为...

    完整版 Java高级教程 Java语言程序设计 第4章 Java泛型(共10页).ppt

    但可以通过使用Boxing和Unboxing自动转换基本类型。同时,我们可以使用`extends`或`super`关键字来限制类型参数的范围,例如`<T extends Number>`表示`T`必须是Number类或其子类。这种有界类型限制可以进一步确保...

    JAVA中实现“相等”比较的深入分析.pdf

    在Java中,为了在面向对象的编程范式下更有效地使用基本数据类型,Java提供了装箱(Boxing)和拆箱(Unboxing)机制。装箱是将基本数据类型转换为对应的包装类对象,例如将int类型的值装箱为Integer类对象。拆箱则是...

    Java虚拟机1.5

    3. **自动装箱与拆箱**:Java 5引入了自动装箱和拆箱机制,使得基本类型和对应的包装器类之间的转换更为简便,无需手动进行Boxing和Unboxing操作。 4. **增强的for循环(foreach)**:Java 5引入了增强的for循环,...

    Java高新技术

    3. **性能优化**:Java性能优化涉及JVM参数调整、Garbage Collection策略选择、代码优化(如避免 boxing/unboxing,减少对象创建)等。理解和掌握JVisualVM、JProfiler等工具对于定位和解决性能瓶颈至关重要。 4. *...

    Java JDK 5.0学习笔记

    例如,int和Integer之间的转换无需手动进行Boxing(包装)和Unboxing(拆箱)操作。 四、变量注解(Annotations) 注解是一种元数据,用于提供有关程序元素的附加信息。Java 5.0引入了@符号来定义注解,如@Override...

    横向技术分析C#、C++和Java优劣.doc

    C#的boxing和unboxing机制在基本类型和对象之间提供了更高效的转换,而Java则依赖于包装类。在安全性方面,C#和Java都引入了托管执行环境,但C#的Just-In-Time(JIT)编译方式在效率上优于Java的解释执行,尤其是在...

    thinking in Java

    例如,int和Integer之间的转换不再需要手动调用Boxing和Unboxing方法。 书中还深入探讨了对象导向设计原则,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则...

    JAVA5新特性介绍.zip

    Java 5,也被称为JDK 1.5,是Java发展历程中的一个重要里程碑,引入了许多显著的新特性,极大地提升了开发效率和代码的可读性。以下是对这些关键特性的详细解释: 1. **自动拆装箱(Auto-boxing/Unboxing)**: 这一...

    Java十年再回首

    **语言特性改进**:Tiger在语言特性上进行了大幅度的改进,这些改进极大地简化了开发人员的日常编程任务,例如引入了泛型(Generics)、增强的for循环(Enhanced For Loop)、自动装箱/拆箱(Auto-boxing/Unboxing)...

    Java1.5的新特性

    Java 1.5,也被称为Java SE 5.0,是Java发展历程中的一个重要版本,它引入了许多新特性和改进,极大地提升了编程效率和代码的可读性。以下是对这些新特性的详细解释: 1. **静态导入(Static Import)** 静态导入...

    Java 语法糖详解1

    自动装箱(Auto Boxing)和拆箱(Auto Unboxing)是Java 5引入的另一个语法糖,它简化了基本类型与它们对应的包装类之间的转换。例如,int和Integer之间的转换不再需要显式调用构造函数或valueOf方法。 糖块六:内部类 ...

    JAVA-int和Integer的区别

    在Java编程语言中,`int`和`Integer`都是用于表示整数值的数据类型,但它们之间存在着显著的差异。理解这些区别对于编写高效且优化的Java代码至关重要。 首先,`int`是Java中的原始数据类型(Primitive Type),它...

    jdk1.5 java

    例如,Integer与int之间可以直接赋值,无需手动调用Boxing和Unboxing方法。 ### 3. 枚举(Enums) Java 5增加了枚举类型,提供了一种更安全的方式来表示一组固定的值。枚举可以拥有方法,可以实现接口,增强了可...

    java学习笔记极品4

    在Java中,`java.util.Date`类提供了获取和操作日期和时间的方法。通过创建`Date`对象的实例,我们可以轻松地获取当前的系统时间。如上文范例4.1所示,只需要一行代码`Datedate=newDate();`,即可创建一个表示当前...

    Java核心知识1:泛型机制详解.pdf

    在非泛型编程中,将简单类型作为Object传递时会引起Boxing(装箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,就不必进行Boxing和Unboxing操作了,所以运行效率相对较高,特别在对集合操作...

    良葛格Java JDK 5.0学习笔记

    Java JDK 5.0是Java发展历程中的一个重要里程碑,它的发布为开发者带来了许多创新特性,极大地提升了编程效率和代码质量。良葛格的Java JDK 5.0学习笔记是一份宝贵的资源,旨在帮助初学者和有经验的开发者深入理解这...

Global site tag (gtag.js) - Google Analytics