java与C语言 变量初始化与默认值

java与C语言 变量初始化与默认值

C语言中,定义局部变量时如果未初始化,则值是随机的,为什么?

  • 定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。

java 局部变量未赋值就初始化,编译报错,而类变量和实例变量被Java默认初始化为0值。

  • Java全局变量和局部变量都是需要初始化的。这是因为使用没有初始化的变量是不安全的。只不过全局变量的初始化工作可以交给JVM。而为什么局部变量不可以呢。我认为是出于性能等多方面的考虑:
    成员变量的值存放于堆中,JVM在分配内存时将整块区域置为零即完成了初始化,方便快捷。而局部变量运行时被分配于栈中,量大,生命周期短,如果由JVM完成初始化,将是一笔很大的性能开销。所以java明文规定局部变量必须初始化。

Java的全局变量分为:

  • 普通变量:在类被实例化时初始化
  • final修饰的变量:必须初始化,否则编译器报错
  • static修饰的变量:在类加载的时候初始化

Java初始化的位置分为:

  • 定义时初始化
  • static代码块初始化
  • 非静态代码块初始化
  • 构造函数初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值