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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孤神法法 中级黑马   /  2014-3-13 22:05  /  1278 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孤神法法 于 2014-3-14 08:43 编辑

int i和 int i=new int()这两个有什么区别!为什么有的类直接实例化一个对象不用new  有的必须new一个?怎么判断到底是否需要用new关键字实例化一个对象?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

4 个回复

倒序浏览
int i=10;是微软提供的一种简写方式.跟创建int i=new int(),i这个对象后给i赋值一样的.
如果是静态类或者静态方法比如;Console就是个静态类那么就可以直接用类名来调用里面的静态成员,就不需要去实例化.
回复 使用道具 举报
本帖最后由 百川 于 2014-3-14 08:31 编辑

int i 只声明变量 i 并没有初始化 int,也就是说此时变量 i 并没有值。而是当赋值时初始化。
int i = new int 是先执行 int 的初始化,此时 i 的值为 0 。,然后将初始化好的int对象指向变量 i 。
在vs中断点调试一下可以知道结果。内置类一般不用new。自定义类需要使用new关键字。

经版主更正,int i 和int i=new int 的编译结果都是int i=0;个人觉得这个比较符合逻辑。但是int i若之后没有赋值生成时会报错,而int i=new int不会。求解释。
(我使用的版本是老师给的7.0)若不赋值生成时会将没有使用过的变量回收,赋值后的编译结果为int i;i =15的结果是int i =15;而int i =new int() ; i =15;的结果为int i =0;i =15。

点评

int i ; i = 15 的编译结果为 i=0,int i = 15 ;两种情况都先是i=0;  发表于 2014-3-14 07:43

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
百川 发表于 2014-3-14 00:36
int i 只声明变量 i 并没有初始化 int,也就是说此时变量 i 并没有值。而是当赋值时初始化。
int i = new i ...
  1. int i ; i = 15 的编译结果为 i=0,int i = 15 ;两种情况都先是i=0;
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马