自动装箱是 Java 编译器在基本类型与其对应的包装类对象之间的自动转换,即从 int 到 Integer、double 到 Double 等的转换。拆箱是从包装类对象到其等效基本类型的自动转换,即:整数转int。该功能在 Java 1.5 版本中引入。
编译器在内部使用 valueOf() 方法将基元转换为相应的包装对象(即自动装箱),反之亦然,它使用 intValue()、doubleValue() 等,就像拆箱的范例一样。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
java中的原始类型和包装类映射如下:
Primitive type | Wrapper class |
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
int | Integer |
long | Long |
short | Short |
double | Double |
让我们采用一个整数数组并利用拆箱概念。
import java.util.ArrayList; public class MyClass { public static void main(String args[]) <em>{</em> ArrayList<Integer> intlist = new ArrayList<Integer>(); //wrapper Integer objects being added here intlist.add(1); interest.add(2); //auto-unboxing is happening here int x = intlist.get(0); System.out.println(x); } }
因此,在上面的例子中,当给 x 添加值时,我们看到 x 看起来是原始的。因此,当分配完成时,拆箱会自动发生。
public class MyClass { public static void main(String args[]) { Integer sum =0; for(int i=0;i<10;i++) { sum = sum + i; } System.out.println(sum); } }
考虑下面的代码片段;这会输出什么?
public class Main { public static void main(String[] args) { Integer m = 34123; Integer x = 34123; System.out.println(x==m); } }
public class Main { public static void main(String[] args) { Integer m = 100; Integer x = 100; System.out.println(x==m); } }
这将计算为“true”值,因为文字池中存在 100。
public class Main { public static void main(String[] args) { Overload obj = new Overload(); int i =5; obj.printval(5); Integer m = i; obj.printval(m); } } class Overload { public void printval(int i) { System.out.println("printing the unboxed value "+ i); } public void printval(Integer i) { System.out.println("printing the autoboxed value "+ i); } }
输出:
注意: 您可以在任何 IDE 中执行上述程序以获得上述输出。我们了解了自动装箱和拆箱的用例,以及这个概念的隐含性及其优缺点。编码时必须谨慎使用;否则,它会增加不必要的计算转换开销。因此,转换必须在原语中完成,以避免过多的垃圾收集开销和临时对象创建。我们还看到了 Java 中带有重载概念的自动装箱的用例。您可以同时检查更多限制。
以上是Java 中的自动装箱和拆箱的详细内容。更多信息请关注PHP中文网其他相关文章!