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

Java对象和基元类型变量混淆[重复]

颜楚青
2023-03-14

我对这三种代码感到困惑

    int a = 5;
    int b = 6;
    int c = 5;

    Integer x = new Integer(5);
    Integer y = new Integer(6);
    Integer z = new Integer(5);

    Integer i = 5;
    Integer j = 6;
    Integer k = 5;

我知道第一个是一些包含值的变量,第二个是一些引用不同对象的变量,但是第三个是什么?我知道它们是引用数据类型。

但我不明白为什么和有多少物体被创造出来。。。如果有的话!

共有2个答案

闻人和歌
2023-03-14

inta=5 存储基元int

Integer x=newinteger(5)存储封装在Integer对象中的基本整数。

整数i=5还存储封装在Integer对象中的基元int,但编译器会为您包装它。这称为“自动装箱”

您也可以执行相反的操作并写入int foo=new Integer(5)。这称为“自动拆箱”。

卢光誉
2023-03-14

整数是一个(包装器)类名,因此这种类型的变量是对象。当x被赋予new整数(5)的值时,从道德上讲,您不能直接使用x进行数学运算。要在操作中使用x,您必须使用包装类方法intValue()从对象形式中以数字(基元)形式获取x的值。

如。:

Integer x = new Integer(5);
int my_x = x.intValue();
int y = 10 + my_x; //y = 15  

然而,在数学运算中直接使用x不会产生错误,事实上,将产生与执行上述步骤相同的输出。这是因为JVM隐式地将对象转换为原始数据值,这个过程称为自动装箱。当隐式完成时,逆操作称为取消装箱。因此,在上述示例中,您还可以执行以下操作:

Integer x = new Integer(5);
int y = 10 + x; //y = 15;

希望你现在明白了。

 类似资料:
  • 我想到这个问题是因为我在某处读到Java不是纯面向对象的语言,因为它使用的是原语(不是对象)。我同意这一点。现在我的问题是,为什么我们使用,而我们已经有了相同类型的对象?

  • 问题内容: 有没有办法从Java通用类的类型变量中获取Class对象?像这样: 此类型信息在编译时可用,因此不受类型擦除的影响,因此,从理论上讲,应该有一种方法来实现此目的。是否存在? 问题答案: 这有效:

  • 下面是代码: null null 当我点击乘法或除法按钮触发函数时,我得到的结果是NAN,但我认为num1和num2都是全局变量,有人能帮我弄清楚为什么这两个都没有定义吗?

  • 看了前面我们谈论到的一些例子,你也许会怀疑ruby的面向对象特性是否属实,这章我们将会详细讲述这方面的内容。我们将会探讨在ruby中如何创建类和对象,并且讨论ruby比其他面向对象语言的一些更强之处。同时,我们也会部分实现我们数亿美元的产品:基于因特网的爵士和布鲁斯自动点唱机。 经过几个月的工作,我们负责的研究人员决定我们的点唱机学要歌曲(songs),所以我们要在ruby中建立一个song类来表

  • 当我们在字节短数据类型中进行加法、减法、除法(等)时,结果来自int值......为什么会这样......? e、 g:-在上面的代码中没有编译,因为c中的结果来自int为什么会发生。。。???当我们尝试使用system out打印c时,出现了错误,因为结果是int

  • 接着我们上一章对对象的探索,我们很自然的将注意力转移到“面向对象(OO)编程”,与“类(class)”。我们先将“面向类”作为设计模式来看看,之后我们再考察“类”的机制:“实例化(instantiation)”, “继承(inheritance)”与“(相对)多态(relative polymorphism)”。 我们将会看到,这些概念并不是非常自然地映射到 JS 的对象机制上,以及许多 Java