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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深情小建 中级黑马   /  2013-9-28 21:26  /  1708 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 深情小建 于 2013-9-29 08:40 编辑

java中定义一个变量,在内存中就开辟了一个空间吗?还是说赋初始值了才开辟内存空间?

评分

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

查看全部评分

7 个回复

正序浏览
在java中定义一个变量是不会在堆内存中开辟空间的,只在栈内存中开辟临时空间,当变量随着方法或者类的执行结束后,会被虚拟机的垃圾回收机制回收并立即被释放。
而在方法中被final修饰或者作为一个静态成员时才会在方法区开辟内存空间,并且该变量值是固定不可改变的,也可以看作是该类中的共享资源。
回复 使用道具 举报
不会,只有在创建了对应类的对象才能被创建.但是被静态修饰的除外.
回复 使用道具 举报
基本数据类型 ::只要声明了变量,就会在栈内存为临时变量分配栈内存
引用数据类型 ::声明变量时在栈内存中分配空间,初始化后再堆内存中分配相应的空间,并将堆内存的首地址放入变量名所在的栈内存中空间中
静态变量 ::放在代码区,归类所有,不需要实例化就可以通过类名调用,类中的成员变量,系统会自动为其初始化,赋予相应的值,所以静态变量系统会自动为其初始化

评分

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

查看全部评分

回复 使用道具 举报
而当定义的时候初始化时的汇编代码:
51:
    52:             int a=0;
00000035 33 D2                xor         edx,edx
00000037 89 55 C0             mov         dword ptr [ebp-40h],edx
    53:             int b = 3;
0000003a C7 45 BC 03 00 00 00 mov         dword ptr [ebp-44h],3
可以对比发现问题的真相

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
我来回答你 这个我知道,· 虽然你这个问题狠简单,   static 的全局变量才会一运行就给空间,

不是静态成员 只会给一个引用  不会分配内存空间的~  

评分

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

查看全部评分

回复 使用道具 举报
我们可以通过底层的汇编代码来看有没有分配存储空间
  52:             int a;
    53:             int b = 3;
00000030 C7 45 BC 03 00 00 00 mov         dword ptr [ebp-44h],3

评分

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

查看全部评分

回复 使用道具 举报
不会分配存储空间的,因为声明一个变量没有进行初始化的时候是不会分配存储空间。

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马