最近给替一个朋友出的几道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]的值可以改变。
|
|
相关推荐
1. 自动装箱: 2. 自动拆箱: 3. 缓存问题
装箱/拆箱与封装:Java 的Map<Something> 问题:我想要一个将整数存储为其值的映射。 现在我有两种方法: 使用任何东西作为键和Integer (非原始整数)作为值,或使用任何东西作为键和一个包含int (原始整数)作为...
但可以通过使用Boxing和Unboxing自动转换基本类型。同时,我们可以使用`extends`或`super`关键字来限制类型参数的范围,例如`<T extends Number>`表示`T`必须是Number类或其子类。这种有界类型限制可以进一步确保...
在Java中,为了在面向对象的编程范式下更有效地使用基本数据类型,Java提供了装箱(Boxing)和拆箱(Unboxing)机制。装箱是将基本数据类型转换为对应的包装类对象,例如将int类型的值装箱为Integer类对象。拆箱则是...
3. **自动装箱与拆箱**:Java 5引入了自动装箱和拆箱机制,使得基本类型和对应的包装器类之间的转换更为简便,无需手动进行Boxing和Unboxing操作。 4. **增强的for循环(foreach)**:Java 5引入了增强的for循环,...
3. **性能优化**:Java性能优化涉及JVM参数调整、Garbage Collection策略选择、代码优化(如避免 boxing/unboxing,减少对象创建)等。理解和掌握JVisualVM、JProfiler等工具对于定位和解决性能瓶颈至关重要。 4. *...
例如,int和Integer之间的转换无需手动进行Boxing(包装)和Unboxing(拆箱)操作。 四、变量注解(Annotations) 注解是一种元数据,用于提供有关程序元素的附加信息。Java 5.0引入了@符号来定义注解,如@Override...
C#的boxing和unboxing机制在基本类型和对象之间提供了更高效的转换,而Java则依赖于包装类。在安全性方面,C#和Java都引入了托管执行环境,但C#的Just-In-Time(JIT)编译方式在效率上优于Java的解释执行,尤其是在...
例如,int和Integer之间的转换不再需要手动调用Boxing和Unboxing方法。 书中还深入探讨了对象导向设计原则,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则...
Java 5,也被称为JDK 1.5,是Java发展历程中的一个重要里程碑,引入了许多显著的新特性,极大地提升了开发效率和代码的可读性。以下是对这些关键特性的详细解释: 1. **自动拆装箱(Auto-boxing/Unboxing)**: 这一...
**语言特性改进**:Tiger在语言特性上进行了大幅度的改进,这些改进极大地简化了开发人员的日常编程任务,例如引入了泛型(Generics)、增强的for循环(Enhanced For Loop)、自动装箱/拆箱(Auto-boxing/Unboxing)...
Java 1.5,也被称为Java SE 5.0,是Java发展历程中的一个重要版本,它引入了许多新特性和改进,极大地提升了编程效率和代码的可读性。以下是对这些新特性的详细解释: 1. **静态导入(Static Import)** 静态导入...
自动装箱(Auto Boxing)和拆箱(Auto Unboxing)是Java 5引入的另一个语法糖,它简化了基本类型与它们对应的包装类之间的转换。例如,int和Integer之间的转换不再需要显式调用构造函数或valueOf方法。 糖块六:内部类 ...
在Java编程语言中,`int`和`Integer`都是用于表示整数值的数据类型,但它们之间存在着显著的差异。理解这些区别对于编写高效且优化的Java代码至关重要。 首先,`int`是Java中的原始数据类型(Primitive Type),它...
例如,Integer与int之间可以直接赋值,无需手动调用Boxing和Unboxing方法。 ### 3. 枚举(Enums) Java 5增加了枚举类型,提供了一种更安全的方式来表示一组固定的值。枚举可以拥有方法,可以实现接口,增强了可...
在Java中,`java.util.Date`类提供了获取和操作日期和时间的方法。通过创建`Date`对象的实例,我们可以轻松地获取当前的系统时间。如上文范例4.1所示,只需要一行代码`Datedate=newDate();`,即可创建一个表示当前...
在非泛型编程中,将简单类型作为Object传递时会引起Boxing(装箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,就不必进行Boxing和Unboxing操作了,所以运行效率相对较高,特别在对集合操作...
Java JDK 5.0是Java发展历程中的一个重要里程碑,它的发布为开发者带来了许多创新特性,极大地提升了编程效率和代码质量。良葛格的Java JDK 5.0学习笔记是一份宝贵的资源,旨在帮助初学者和有经验的开发者深入理解这...