int和Integer输出的结果不同

哒哒路 2011-02-18 04:44:14

Integer j;
int i;
public void test()
{
System.out.println(j);
System.out.println(i);
}

输出结果:
null
0
问题1:为什么integer输出的null,而不是0.


public void test()
{
Integer j;
int i;
System.out.println(j);
System.out.println(i);
}

问题2:为什么这样编译都不通过?而问题1中没有赋值也能通过?

学java也有段时间了,这些问题的结果都知道,但是不知道其中的理论,不知道所以然,还请大家不吝赐教,在此多谢了。
...全文
839 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
worinixianren11 2012-10-24
  • 打赏
  • 举报
回复
元芳!你怎么看?
鼻儿盖子 2012-08-04
  • 打赏
  • 举报
回复
赞一个[Quote=引用 10 楼 的回复:]

首先,java中变量分为基本数据类型和引用类型,Integer是引用类型,而int是基本数据类型。

问题1中i和j是类的成员变量,jvm在为对象实例化时,会先根据对象的大小分配一定的内存空间,把这部分内存清零,从而对象的所有成员变量都会有默认值,这样Integer的默认值是null,int的默认值是0.

问题2中i和j是局部变量,jvm不会进行默认赋值,必须对局部变量进行初始化,否则……
[/Quote]
asklater 2011-02-24
  • 打赏
  • 举报
回复
.....可以在论坛里面找下关于Integer和int的帖子!
shengpulong 2011-02-24
  • 打赏
  • 举报
回复
Integer是一个类,在使用时如果没有此对象当然就是null啦,int是java中的基本类型,java规定int的默认值是0,integer是对int的一个封装。希望你能理解
tracyailk 2011-02-24
  • 打赏
  • 举报
回复
int 是JAVA 基本对象
Integer 是int 的封装对象
ATingBug 2011-02-24
  • 打赏
  • 举报
回复
int是原始类型,Integer是引用类型,是int的封装
它的默认初始值是null、而int的默认值是0
哒哒路 2011-02-24
  • 打赏
  • 举报
回复
么那么多分了,28楼讲的很详细,多谢了
安卓机器人 2011-02-23
  • 打赏
  • 举报
回复
Integer是int的封装类,默认初始值为null
int是基础类,默认初始值为0
pengyin_cc 2011-02-23
  • 打赏
  • 举报
回复
int是数值类型,返回的默认值0
Integer则是int对应的封装类,所以返回null
java中几种基本类型数据,都有对应封装类
dingxinzhang 2011-02-23
  • 打赏
  • 举报
回复
int是基本类型数据,默认值为0
Integer是int的封装对象,默认值为null


ww884203 2011-02-23
  • 打赏
  • 举报
回复
学习了。。。。一个小细节就好麻烦。。。
bear_james 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 chosen0ne 的回复:]
首先,java中变量分为基本数据类型和引用类型,Integer是引用类型,而int是基本数据类型。

问题1中i和j是类的成员变量,jvm在为对象实例化时,会先根据对象的大小分配一定的内存空间,把这部分内存清零,从而对象的所有成员变量都会有默认值,这样Integer的默认值是null,int的默认值是0.

问题2中i和j是局部变量,jvm不会进行默认赋值,必须对局部变量进行初始化,否则,……
[/Quote]



十楼说得对!!!!
txzsp 2011-02-22
  • 打赏
  • 举报
回复
问题1:为什么integer输出的null,而不是0.
首先,Integer是int的一个包装类,类的初值自然是null。
其次,int是一中基本类型,整型的初值自然是0。

问题2:为什么这样编译都不通过?而问题1中没有赋值也能通过?
这是JAVA的语法特性,局部变量必须赋予初值,否则无法通过编译。
而第一种方式是因为成员变量,成员是允许不赋初值的。
zh_666 2011-02-22
  • 打赏
  • 举报
回复
越讲越全,顶楼上的
hanRivergo 2011-02-22
  • 打赏
  • 举报
回复
越讲越全,越好。
jixiang_yexin 2011-02-22
  • 打赏
  • 举报
回复
1.int 是基本数据类型

Integer 是java中封装的对象

所以才会有null

另外 对于全局变量 int 的默认值为0

2.对于第二问 主要是由于 int 的那个变量引起的

java中对于 局部变量int 是必须给一个 初始值(即在使用前 先赋值)

所以第二段代码 不能通过编译
jacking124 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ygycomon 的回复:]
Integer 是对象,java默认对象的初始值当然是null
int不是对象,是基础数据类型,java默认初始值就是0
[/Quote]
楼上正解。
tanrenye 2011-02-21
  • 打赏
  • 举报
回复
1、i和j是成员变量,系统自动赋值,基本数据类型int自动赋值为0,包装类Integer自动赋值为null。
2、i和j在方法里面,是局部变量,局部变量在声明的时候必须初始化(赋值)。
_黑白_ 2011-02-21
  • 打赏
  • 举报
回复
int是java的基本数据类型,当你声明一个int类型的变量时,如果不给它赋初始值那么它默认的值就是0(如果是double类型的话就是0.0)。
Integer是java封装好的类,Integer j声明了一个Integer的对象j,可以理解为j的数据类型为Integer,它的默认值是null
飞翔的牧人 2011-02-21
  • 打赏
  • 举报
回复
第一段代码里是成员变量,也就是类变量,会自动初始化,再加上Integer是int的包装类,Integer是一个类,它的默认值是null,然后int的默认值是0啊;第二段代码你把那个变量放在了方法里面,它已经是局部变量了,不会自动初始化,所以编译过不去。。。
加载更多回复(31)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧