在网上看了一篇文章(如下)有点不明白(就是注释那里),值类型的在栈上,引用类型在堆上,那么它注释写堆栈上新的int类型是什么意思,是不是写错啦请指教!!5. 既然 int是值类型,而 class是引用类型,那么int是怎样从Object派生的呢?    是这样的,当int用作int时候,这是一个值类型(在栈上),然而,当它用作是Object时,这是一个引用堆上的整数值的引用类型。换而言之,当你将int看作对象时,运行层将它自动转化为对象引用,这个转化过程称作装箱(boxing)。这个转换包括将栈里的值拷贝到了堆里,并且新建了一个对象的实例来引用该值。拆箱操作(unboxing)是个反过程——将对象转化为基于栈的值类型。 int x = 3; // 堆栈上新的int类型,值为3 object objx = x; // 堆上新的int, 设定值为3,x=3仍然在堆栈上 int y = (int)objx; //新的int类型的值3在堆栈上,x=3在堆栈上,objx=3在堆上 

解决方案 »

  1.   

    1.先定义一个int类型,在堆上,说明这个东西已经存在了2.然后又定义一个object,用上面定义的int类型的x给这个objx赋值  因为object是终极基类,可以和任何类型匹配,所以可以不用转换,直接从int类型中获取值,它就在堆上了。3.在定义一个int类型的变量y,用从object类型转换后的int值给y赋值,一又是在堆上了就是这样
      

  2.   

    在网上看了一篇文章(如下)有点不明白(就是注释那里),值类型的在栈上,引用类型在堆上,那么它注释写堆栈上新的int类型是什么意思,是不是写错啦请指教!! 
    ---
    在堆栈上开辟一个新空间 存放 int类型变量y 赋值是objx副本的值 3 ,对objx拆箱