Java对象和原始类型变量混淆

标签 java

我对这三个代码感到困惑

    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;

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

但我不明白为什么创建了多少对象......如果有的话!

最佳答案

Integer 是一个(包装器)类名,因此该类型的变量是对象。当x被赋予new Integer(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对象和原始类型变量混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39511977/

相关文章:

java - 对齐所有 gridbaglayout 元素

java - Java GUI 应用程序发生 MySQL 数据截断错误,但不是直接在 MySQL 上发生

java - 数据库中的 Picketlink 自定义关系重复记录

java - 如何填充<s :select> with a json response?

java - 合并来自不同声明的多个@TestExecutionListeners?

java - HttpClient 使用 Genymotion 模拟器卡在 Android 上

java - NullPointerException 因为重写函数并被父类(super class)调用

java - 在java中解析XML的访问权限

java - JBoss 中的 "javax.servlet.ServletException: non-HTTP request or response"

java - eclipse : manually select main class for executable jar file