我对这三个代码感到困惑
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;
我知道第一个是包含值的变量,第二个是一些变量引用一些不同的对象,但第三个是什么?我知道它们是参考数据类型。
但我无法理解为什么以及创造了多少对象......如果有的话!
答案 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)
。这称为“自动拆箱”。