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

时间:2016-09-15 13:13:33

标签: 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;

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

但我无法理解为什么以及创造了多少对象......如果有的话!

2 个答案:

答案 0 :(得分:2)

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 隐式将对象转换为原始数据值,此过程称为自动装箱。隐式完成时,反向称为 Un-boxing 。因此,在上面的示例中,您还可以执行此操作:

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

希望你现在明白。

答案 1 :(得分:1)

int a = 5;存储一个原始int

Integer x = new Integer(5)存储一个包含在Integer对象中的原始int。

Integer i = 5;还存储一个包裹在Integer对象中的原始int,但编译器负责为你包装它。这称为“自动装箱”

你也可以反过来写int foo = new Integer(5)。这称为“自动拆箱”。