是自动装箱和拆箱操作员重载

时间:2011-02-14 05:13:00

标签: java

自动装箱和拆箱实际上是否是运营商重载的奇特术语?当我们说Integer i = 10;时会发生什么?

9 个答案:

答案 0 :(得分:6)

不,这不是运营商超载。 Java没有为运算符重载提供任何机制。

Integer i = 10;

就像说:

Integer i = Integer.valueOf(10);

根本没有超载=

答案 1 :(得分:3)

内部编译器生成Integer i=Integer.valueOf(10);

答案 2 :(得分:2)

不,自动装箱和拆箱只是“语法糖”。这意味着隐含了额外的计算(需要在字节代码中发出),但编译器会为您轻松隐藏它。

答案 3 :(得分:1)

Autoboxing / unboxing是一种编译器功能,因此您无法自行实现。 Java中无法进行运算符重载。

这是一个很好的例子(类似于你所问的),关于原始类型装箱会发生什么: http://www.leepoint.net/notes-java/data/basic_types/autoboxing.html

答案 4 :(得分:1)

使用Java 5在java中引入了自动装箱和拆箱。让我们考虑一个例子来理解这些术语。检查下面的代码并考虑它是否会编译......

int sum(int a, int b)
{
  return a+b;
}

Integer I =sum(3,4);

在上面的示例中,如果您尝试使用java 1.4或更低版本编译它,您将看到编译错误。编译器会抱怨返回类型的方法" sum"变量的类型" I"因为方法是返回原始数据类型,其中Integer是int的包装类。但是由于名为autoboxing的功能,相同的代码将编译并运行java 5。在自动装箱编译器中,将原始数据类型转换为相应的对象包装类,例如。 int到Integer,char到Character等。 当原始类型值为时,java编译器应用自动装箱 分配给相应包装类的变量。 作为参数传递给期望输入参数为相应包装类的方法。

自动装箱/拆箱的好用是在Generics中我们定义某种类型的集合(一些包装类对象)并向其添加基本类型数据。请参阅以下示例

List<Integer> lst=new ArrayList();
lst.add(5);

在类似路径上,将包装器类型对象转换为其对应的基本类型在java中称为拆箱。

您可以在http://javatechnologyhelper.blogspot.com/2014/07/autoboxing-unboxing-in-java.html

找到详细信息

答案 5 :(得分:0)

像其他人一样,auto(un)boxing不是运算符重载。 Java的运算符重载仅限于语言中定义的内容。因此,例如,每个基本类型都有一个=运算符(包括对象引用);逻辑|和int(逐位)|;等

答案 6 :(得分:0)

装箱和取消装箱是转化,与将int转换为float非常相似。它是关于在应用操作之前调整类型而不是操作符。

答案 7 :(得分:0)

这不是运算符重载,但出于所有实际目的,它与组合运算符/方法重载相同。正如在其他答案中指出的那样,生成的代码存在于调用者而不是被调用者,就像方法真正被重载一样。

答案 8 :(得分:0)

自动装箱: 它是将premitive数据类型转换为引用数据类型(相对包装类)的过程。 例如: int x = 5;

Integer ob = new Integer(x);

这里&#39; x&#39;(int)是premitive并转换为引用数据类型(整数)。

我们可以在不创建对象的情况下进行自动装箱。

整数ob = x;

这里隐式编译器创建一个像上面创建的对象。

Autounboxing:

将引用数据类型转换为premitive数据类型的过程。

int x = 5; 整数ob = x; //自动装箱

int x = ob.intValue(); // autounboxing

我们可以在autounboxing步骤中使用方法intValue()编写。

int x = ob; // autounboxing。

这里编译器隐式调用intValue()方法。

此功能于2004年在jdk1.5中引入。