黑马程序员技术交流社区

标题: java中定义一个变量 [打印本页]

作者: 深情小建    时间: 2013-9-28 21:26
标题: java中定义一个变量
本帖最后由 深情小建 于 2013-9-29 08:40 编辑

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

作者: andylau    时间: 2013-9-28 21:38
不会分配存储空间的,因为声明一个变量没有进行初始化的时候是不会分配存储空间。
作者: andylau    时间: 2013-9-28 21:39
我们可以通过底层的汇编代码来看有没有分配存储空间
  52:             int a;
    53:             int b = 3;
00000030 C7 45 BC 03 00 00 00 mov         dword ptr [ebp-44h],3
作者: a283398689    时间: 2013-9-28 21:40
我来回答你 这个我知道,· 虽然你这个问题狠简单,   static 的全局变量才会一运行就给空间,

不是静态成员 只会给一个引用  不会分配内存空间的~  
作者: andylau    时间: 2013-9-28 21:41
而当定义的时候初始化时的汇编代码:
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
可以对比发现问题的真相
作者: 何丛    时间: 2013-9-28 22:12
基本数据类型 ::只要声明了变量,就会在栈内存为临时变量分配栈内存
引用数据类型 ::声明变量时在栈内存中分配空间,初始化后再堆内存中分配相应的空间,并将堆内存的首地址放入变量名所在的栈内存中空间中
静态变量 ::放在代码区,归类所有,不需要实例化就可以通过类名调用,类中的成员变量,系统会自动为其初始化,赋予相应的值,所以静态变量系统会自动为其初始化
作者: jìng╮煜    时间: 2013-9-28 23:12
不会,只有在创建了对应类的对象才能被创建.但是被静态修饰的除外.
作者: .只影、天涯.    时间: 2013-9-29 00:21
在java中定义一个变量是不会在堆内存中开辟空间的,只在栈内存中开辟临时空间,当变量随着方法或者类的执行结束后,会被虚拟机的垃圾回收机制回收并立即被释放。
而在方法中被final修饰或者作为一个静态成员时才会在方法区开辟内存空间,并且该变量值是固定不可改变的,也可以看作是该类中的共享资源。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2