自动装箱与拆箱的误用
在JAVA JDK1.5以后具有的自动装箱与拆箱的功能,所谓的自动装箱
与拆箱也就是把基本的数据类型自动的转为封装类型。
如:自动装箱,它可以直接把基本类型赋值给封装类型
Integer num = 10 ;
Double d = 2d ;
自动拆箱,它可以把封装类型赋值给基本类型
int num = new Integer(10);
double d = new Double(2d);
知道了自动装箱与拆箱后我们现看一下下面这两个程序代码:
AutoBoxDemo1.java
-------------------------------------------------------
public class AutoBoxDemo1
{
public static void main(String[] args)
{
Integer d1 = 100 ;
Integer d2 = 100 ;
if(d1==d2)
System.out.println("d1==d2");
else
System.out.println("d1!=d2");
}
}
AutoBoxDemo2.java
--------------------------------------------------------
public class AutoBoxDemo2
{
public static void main(String[] args)
{
Integer d1 = 200 ;
Integer d2 = 200 ;
if(d1==d2)
System.out.println("d1==d2");
else
System.out.println("d1!=d2");
}
}
大家看看这两个程序代码的结果是怎么样的呢?
其实在AutoBoxDemo1.java中结果是:d1==d2
在AutoBoxDemo2.java中结果是:d1!=d2
为什么结果会是这样的?我们来看了解一下!
其实刚刚这两个程序结果的不同是与==运算符比较有关,==是用来比较
两个基本数据类型的变量是否相等的,而事实上==也用于判断两个对象
变量名是否参考同一对象。在自动装箱时对于值从-128到127之间的值
它们被装箱为Integer对象后会在内存中重用,所以在AutoBoxDemo1.java
中是相等的,而超过了从-128到127之前的值时,被装箱后的Integer对象
并不会被重用。所以AutoBoxDemo2.java中是不相等的。
分享到:
相关推荐
Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...
4. **自动装箱和拆箱**:这个特性简化了基本类型与对应的包装类之间的转换。例如,int和Integer之间的转换不再需要手动调用Boxing和Unboxing方法。 书中还深入探讨了对象导向设计原则,如单一职责原则(SRP)、开放...
1. **类型转换与自动装箱拆箱**:Java中存在基本类型与其对应的包装类,如`int`与`Integer`。自动装箱与拆箱可以简化代码,但也会引入一些问题,例如在循环中使用`Integer`而非`int`可能会导致内存泄漏。 2. **变量...
装箱和拆箱是C#中处理值类型与引用类型之间转换的操作。装箱是将值类型转换为object类型,而拆箱则是将object类型转换回原来的值类型。对象类型(Object)是所有引用类型的基类,允许进行这些操作。 在C#中,常量有...
2. **Autoboxing and Unboxing(自动装箱与拆箱)**:自动将基本类型与对应的包装类之间进行转换,简化了编程。 3. **Enhanced for loop(增强型for循环)**:也称为foreach循环,简化了遍历集合的操作。 4. **...
1. **类型转换与装箱拆箱**:.NET中的值类型和引用类型在转换时需要特别注意,尤其是涉及到装箱和拆箱操作时,可能会引发性能下降或意外的空引用异常。 2. **空引用(Null References)**:在处理对象时,未初始化...
例如,自动装箱和拆箱功能可以简化开发过程中的类型转换操作,但也可能导致性能开销或意外的 NullPointException。 **3. 异常处理机制** Java 的异常处理机制是其一大特色,它通过 try-catch-finally 结构来捕获并...
2. **自动装箱与拆箱**:Java中的基本类型与对应的包装类之间可以自动转换,但这也可能隐藏潜在的性能问题。比如,连续的装箱和拆箱操作可能导致不必要的对象创建。 3. **字符串常量池**:Java中的字符串具有特殊性...
22. 装箱与拆箱:装箱是将值类型转换为对应的引用类型,拆箱则是反向操作,需注意可能引发的异常。 23. 泛型:泛型提供了一种方式,使得代码能适用于多种类型,提高代码的重用性并确保类型安全。 24. async与await...
- **int与Integer区别**:前者为基本类型,后者为包装类,涉及自动装箱和拆箱的概念。 - **原始数据类型分类**:整型、浮点型、字符型、布尔型等。 - **变量初始化**:明确初始值,防止未初始化使用导致程序错误。 ...
使用`Integer`时,可以利用Java的自动装箱/拆箱特性进行转换。 #### 三、String与StringBuffer **1. String与StringBuffer的区别** - **String**:不可变字符串,一旦创建后内容不可更改。 - **StringBuffer**:...
- **自动装箱与拆箱**:从Java 5开始,引入了自动装箱和拆箱机制,使得开发者可以在`int`和`Integer`之间自动转换。 - **null值处理**:`Integer`对象可以为`null`,这在处理不确定是否有值的情况时非常有用;而`int...
它们提供了类型安全和更好的性能,避免了非泛型集合(如`ArrayList`)带来的装箱和拆箱开销。泛型集合确保了集合元素的类型一致性,减少了运行时错误的可能性,并提高了代码的可读性和可维护性。 总之,掌握这些C#...
1. **类型转换和自动装箱拆箱**:Java中的基本类型与对应的包装类之间可以进行自动转换,但这种转换可能隐藏着一些潜在的问题,如精度丢失、隐式转型等。 2. **变量作用域**:Java中变量的作用域是严格控制的,包括...
这样可以保护对象内部状态不受外部干扰和误用,同时提供清晰的接口与对象通信。 继承:一种表达新创建的类(子类)继承另一个类(父类)特征和行为的机制。子类拥有父类的所有属性和方法,并可以扩展或重写父类的...
- **3.2.1 int和Integer的区别**:对比了基本类型`int`与包装类`Integer`之间的差异,包括自动装箱与拆箱的概念。 - **3.2.2 原始数据类型的分类**:概述了Java中的所有原始数据类型,并比较了它们的特性和适用...