java中只声明变量不付值,系统会给分配内存吗

如题所述

基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。

一个完整的Java程序运行过程会涉及以下内存区域:
1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。
2、 栈:保存局部变量的值,包括:
1)用来保存基本数据类型的值;
2)保存类的实例,即堆区对象的引用(指针)
3)也可以用来保存加载方法时的帧
3、堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。

4、常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其他类型、方法、字段的符号引用(1)。池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中。

5、代码段:用来存放从硬盘上读取的源程序代码。
6、数据段:用来存放static定义的静态成员。

注意:
1.一个Java文件,只要有main入口方法,我们就认为这是一个Java程序,可以单独编译运行。
2.无论是普通类型的变量还是引用类型的变量(俗称实例),都可以作为局部变量,他们都可以出现在栈中。只不过普通类型的变量在栈中直接保存它所对应的值,而引用类型的变量保存的是一个指向堆区的指针,通过这个指针,就可以找到这个实例在堆区对应的对象。因此,普通类型变量只在栈区占用一块内存,而引用类型变量要在栈区和堆区各占一块内存。
温馨提示:内容为网友见解,仅供参考
无其他回答

java中只声明变量不付值,系统会给分配内存吗
基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。一个完整的Java程序运行过程会涉及以下内存区域:1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2、 栈:保存局部变量的值,包括:1)用来...

我只申明一个变量,但不初始化,也就是不赋值,在运行时它是否占据内存空间...
只要你定义了变量,系统就会为它分配内存空间。初值可以不用你自己赋值,系统会在执行该声明语句的时候赋予初值。你说的不用是对的,但是得看初值你能否用到,如过有特殊意义的话,你就应该自己赋值。

java在声明一个变量时有没有分配内存空间?
只要定义了,都会分配内存空间 为什么要把内存划分为静态区等四个区?1、栈区— 由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源 2、堆区— 一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个...

在java class中定义了一个全局静态变量,使用过程中这个静态值突然没了...
NullPointException意为空指针异常,你在java class中定义了一个全局静态变量,使用过程中这个静态值突然没了,静态值没了系统就会释放这块内存,就相当于你只定义了一个变量而没有个它赋值,没有赋值就没有分配内存空间,也就没有指针一说,你再去使用这个变量当然就会出现空指针异常了即NullPoint...

定义一个变量如果没赋初值, 是不是系统自动将其初值赋为0了
这个要看对象的类型,如果是值类型,且是成员变量的话,会赋初值的 如果是引用类型,你定义他是不会赋初值的,只有当你new他的时候,也就是实例化他的时候才会调用构造函数

声明一个变量占空间吗?
计算机编程中声明的含义当一个计算机程序需要调用内存空间的时候,对内存发出的“占位”指令,我们称之为“声明”。声明一个变量只是将变量名标识符的有关信息告诉编译器,使编译器“认识”该标识符,但是声明并不一定引起内存的分配!而定义一个变量意味着给变量分配内存空间,用于存放对应类型的数据,变量...

java属性常量没有默认值那属性加载时是怎么分配空间的,java 不是给属...
类变量的初始化分为两个阶段。第一次是在类加载的准备阶段。准备阶段会正式为类变量分配内存并设置类变量的初始值。如果类变量是基本数据类型,初始值为其对应初值,如果为对象类型,初始值为null。如果类变量同时被final关键字修饰,那么准备阶段就会直接将变量赋值。成员变量属于对象独有,每个对象创建时...

在Java中定义数组时必须分配内存,这句话是错的还是对的呢
如:1. int[] arr = null;此时只是在栈中声明了一个 arr 数组,但并未对其分配空间,所以它没有指向 2. int[] arr = new int[6];此时在栈中声明了一个arr数组,并且在堆中开辟了一块空间,此时 arr 已经分配内存了 看具体的情况吧,定义数组应该是声明吧,在需要的时候再开辟空间也可以 ...

java中string不赋值输出什么?
3、基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。4、程序中的位置:这个和其他的数据类型一样,可以放在程序的任意位置。赋值:你可以在创建的时候就赋值例如Stringstr[]={a,b,c,5};这既指定...

java中声明不使用的变量会影响效率吗
Java中的变量是有其作用域的 ,如果你声明的是全局变量,则在该类中有效,如果你声明的是局部变量,则只是在该方法中有效。但是不管是成员变量还是局部变量都需要分配内存。而程序的运算速度则是和CPU相关,只要你的内存足够,多定义几个不用的变量,是不会对运算速度产生影响的。你可以自己多写两行...

相似回答