java中,声明基础变量和数组后都有默认值。例如int i;//默认值是0;int []i=new int [10];//默认值都是0

为什么同样无初始化~数组就可以直接使用在System.out.print(i[0]);///而inti;不初始化话就不能!!!!还有一个问题,基础变量是储存在栈中而new... 为什么同样无初始化~数组就可以直接使用在System.out.print(i[0]);///
而int i;不初始化话就不能!!!!
还有一个问题,基础变量是储存在栈中而new创建的就储存在堆中呢??
展开
 我来答
般若兮若
推荐于2017-10-15 · TA获得超过2706个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:938万
展开全部
首先要看你初始化的int i是在哪里.如果是在static的话默认值是0是可以直接打印的.在类定义的默认值也是0,也可以.但是在方法中定义的要初始化.
起初所有的东西都是new在堆中的,只不过后来有了一个常量池的概念.所以很多常用的都放入常量池了,用的时候先去常量池查找,因此不用new了.这些在常量池中的东西也是在堆中,并不是在栈中.
关于初始化,你的数组在你new的时候就已经初始化了,你怎么能说没有初始化就打印呢?
追问
哦~~我懂了。。。
关于你说的。初始化的int i是在哪里,如果是在static的话默认值是0是可以直接打印的在类定义的默认值也是0,也可以.但是在方法中定义的要初始化.
可以稍微解释一下么?
定义在main里的static int a;//会提示错误耶,说只允许使用终态。
你说得类定义是怎样的啊?就是static int a;写在main外面么?
=。=main也算是一个方法吧。。
追答
public class Test{
static int i;//这是静态变量
int a;//这是成员变量
public static void main(String... args){
System.out.println(i);
System.out.println(new Test().a);
}
}
a11e90
2012-11-26 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

向TA提问 私信TA
展开全部
额 不知道你从哪本书上看来的int i;i会初始化。。。这明显是错的啊
new 出来的对象是放到堆中 但不是基础变量就都放到栈中的 要局部的才是
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2012-11-26 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2345万
展开全部
成员变量才会被自动初始化,局部变量不会。

而且数组是引用类型,只会被初始化成null。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式