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

为什么整数类对象的引用中的增量操纵整数值?

白翔
2023-03-14

我有一个基本的疑问,我们可以增加整数类对象的引用,而不是任何其他类的引用(D类有1个整数数据成员和一个参数化构造函数)。

Integer x=new Integer(10); x++;
    D d=new D(10); d++;

这里x和d都是引用,但我们仍然可以增加整数引用,而不增加任何其他引用。我错过了一些非常基本的东西,请帮助我。

共有3个答案

岑畅
2023-03-14

Java无法为任意类重载运算符。因此,D d; d不可用。您可以这样做:

public class D {
    private int value;
    public D( int v ){
        value = v;
    }

    public void increment(){
        value++;
    }
}

现在你可以做

D d = new D(10);
d.increment();

D 的值将为 11。

潘文乐
2023-03-14

这是因为从jdk 1.5引入了包装类的自动装箱。在内部,java会将整数引用转换为int并递增它。您不能递增对象。

东方华晖
2023-03-14
Integer x=new Integer(10); x++;

这里java编译器将执行对象的un-box,将整数对象转换为原语int。然后将执行增量操作。这仅适用于java原语,自动装箱正在将原语转换为包装对象,反过来是调用un-box。这就是这里发生的事情。

自动装箱或取消装箱是一种自动转换,它仅适用于 java 原语。因此,它不能在其他对象上执行。请记住,对象不仅仅是像 C 或 C 这样的内存引用,我们可以递增它们。

 类似资料:
  • 我试过用 但它不能用于像3141592653589793238462643383279502884197169399375这样的数字,我最多需要10^80。你知道吗?让我知道。非常感谢。

  • 问题内容: 在Python 2.5中,我有一个浮点数,我想获取并操纵其位模式为整数。 例如,假设我有 在IEEE 754格式中,十六进制的位模式为。 如何在该位模式上获取和操纵(例如,执行按位运算)? 问题答案: 您可以使用以下模块获取所需的字符串(显然暗含32位大尾数表示形式; Python内部使用本机尾数和64位浮点数): 这还不能让您执行按位运算,但是您可以再次使用struct将字符串映射为

  • 问题内容: 考虑以下代码: 编译产生错误 因为表达式i / j的类型显然是int,因此必须将其强制转换为short。 为什么类型不短? 问题答案: 从Java规范: 5.6.2二进制数值提升 当运算符将二进制数值提升应用于一对操作数时,每个操作数必须表示一个数值类型的值,以下规则按顺序适用,并根据需要使用加宽转换(第5.1.2节)来转换操作数: 如果一个操作数的类型为double,则另一个将转换为

  • 问题内容: 但是,如果用前导零检查Integer,则会发现问题是在jdk7发行之前进行的,因此其研究工作量较小。但是在jdk7中,对整数进行了一些更改和添加。以下是有关jdk7的最新答案。 我有一个代码: 编译时出现错误:整数太大:09 为什么这样做呢? 同样,如果我将代码更改为: 现在输出是10 为什么给输出10而不是12? 问题答案: 开头的数字被认为是八 - 9不是一个八进制数字(但(传统)

  • 问题内容: 任何数据类型的上限(不包括)总是比下限的绝对值小1。 例如,an的上限为2,147,483,647,ABS(下限)= 2,147,483,648。 是否有理由总是总是比负整数多一个负整数? 编辑:更改,因为问题与数据库不直接相关 问题答案: 您提供的类型是有符号整数。让我们来看一个字节(8位)的示例。使用1字节,您可以使用组合来存储256个可能的数字。 现在,您要具有相同数量的正数和负

  • 问题内容: 我对为什么Integer和int可以在Java中互换使用感到困惑,即使一个是原始类型,而另一个是对象也是如此? 例如: 要么 问题答案: 发布的文章的前几句话很好地描述了它: 您不能将int(或其他原始值)放入集合中。集合只能容纳对象引用,因此您必须将原始值装箱到适当的包装器类中(在int情况下为Integer)。当您从集合中取出对象时,您将得到放入的Integer。如果需要一个int