A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM朱百青 中级黑马   /  2013-4-23 01:16  /  1481 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

既然 int是值类型,而 class是引用类型,那么int是怎样从Object派生的呢?

3 个回复

倒序浏览
 是这样的,当int用作int时候,这是一个值类型(在栈上),然而,当它用作是Object时,这是一个引用堆上的整数值的引用类型。换而言之,当你将int看作对象时,运行层将它自动转化为对象引用,这个转化过程称作装箱(boxing)。这个转换包括将栈里的值拷贝到了堆里,并且新建了一个对象的实例来引用该值。拆箱操作(unboxing)是个反过程——将对象转化为基于栈的值类型。
  1. int x = 3; // 堆栈上新的int类型,值为3   
  2. object objx = x; // 堆上新的int, 设定值为3,x=3仍然在堆栈上   
  3. int y = (int)objx; //新的int类型的值3在堆栈上,x=3在堆栈上,objx=3在堆上
复制代码
回复 使用道具 举报
个人理解(如果有误希望大家回复指点下):  
      int(值类型)转换为Object(引用类型), 其实就是创建了一个对象Object的实例所指向的int实例的地址(引用)~
      若是值类型的实例,且表现的是实际数据,则存储在栈上;如果是引用类型的实例,那就存储在堆上
回复 使用道具 举报
如果有说的不对的,希望大神能够指点,感激不尽:
1>int到object相当于是装箱(boxing);而如果是从object到int则是相当于拆箱(unboxing)
2>用什么类型装箱的,就得用同一种类型去拆箱,否则拆箱不成功
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马