这里对int1赋值30是不对的,因为int1是一个CInt类型的对象,不能给它赋常量值。 即使是自动包装机制,也只能把int包装成Integer,而不是包装成CInt。 class CInt { public CInt(Integer v) { this.v = v;//这里把Integer对象赋值给int变量,用到了自动包装机制。 } private int v = 0; }/////////////////////// CInt int1 = new CInt(30);//这里把常量30自动包装为Integer对象。
等同于Integer i = new Ingeger(30)
楼主举的这个例子是Java的自动包装机制,只有基本数据类型才有。
对象 = 基本数据;
这种方式赋值时,自动调用参数为基本数据的构造函数.
如:
Integer I;
I = 30;
class CInt {
public CInt(int v) {
this.v = v;
} private int v = 0;
}///////////////////////
CInt int1;
int1 = 30; //那为什么这里又不能自动包装了呢?
除了虚拟机自己定义好的。你楼上的推论,因为虚拟机没有实现这个功能。
你不能认为Integer这个类,跟你的类是相同的。
Integer和int之间的转换,不是语言的特性,而是虚拟机实现的一个功能。
就如同
for(int i: arr)
{.....}
你不能用foreach(int i: arr)
{.....}
进行替代。
你说你的foreach也和for一样?
即使是自动包装机制,也只能把int包装成Integer,而不是包装成CInt。
class CInt {
public CInt(Integer v) {
this.v = v;//这里把Integer对象赋值给int变量,用到了自动包装机制。
} private int v = 0;
}///////////////////////
CInt int1 = new CInt(30);//这里把常量30自动包装为Integer对象。