当前位置: 首页 > 知识库问答 >
问题:

Java中的运算符重载(整数包装类)?[重复]

壤驷骁
2023-03-14

我在OCJP的书中看到一个例子。它说

Integer y=new Integer("20");
y++;   (un-wraps it)
System.out.println(y);

现在,这将打印21。因此,这让我想到,编译器怎么知道在< code>y 时应该把它解包成int并递增它呢?Integer只是一个普通的类(可能是包装类??),是内置的运算符重载吗?

如果可能的话,有没有办法为我自己的自定义类执行此操作?

共有1个答案

东郭骁
2023-03-14

Java 使用一种称为自动装箱和拆箱的功能来解开该整数并将其递增。不能在自己的用户定义类中实现此功能。它仅适用于 Java 基元类型的包装类。

 类似资料:
  • 问题内容: 请告诉我Java是否可以重载运算符?如果可以在Java中的任何地方使用它,请告诉我。 问题答案: 不,Java不支持用户定义的运算符重载。Java唯一接近“自定义”运算符重载的方面是对字符串+的处理,这将导致常量的编译时串联或使用StringBuilder / StringBuffer的执行时串联。但是,您无法定义自己的操作符,它们的操作方式相同。 对于确实支持运算符重载的类Java(

  • 整数包装类 我无法理解这种输出是如何形成的。我想了解这个整数中的“1000”是如何转换成字节中的“-24”的。我想知道这背后的逻辑。

  • 我知道Java不支持运算符重载,但我看到您可以为Integer对象赋值,例如,使用运算符,而不是使用setter。 所以我想知道是否有可能将这种行为实现到任何类?

  • 我了解到Java不允许程序员重载操作符。我还了解到是java中唯一重载的运算符, 但是, 运算符将整数操作数作为按位运算符处理。

  • 我在运算符过载时遇到问题 主要是我有 其中<code>Integer</code>只是<code>int</code>的包装,带有我需要的一些特殊功能。 然而,当我编译上面的代码时,我得到了错误C2679,它表示<code>binary' 我还试图删除友元声明中的参数,因此代码变成了: 但这会产生另一个错误:C2785:

  • Rust可以让我们对某些运算符进行重载,这其中大部分的重载都是对std::ops下的trait进行重载而实现的。 重载加法 我们现在来实现一个只支持加法的阉割版复数: use std::ops::Add; #[derive(Debug)] struct Complex { a: f64, b: f64, } impl Add for Complex { type Outpu