首页 > 试题广场 >

下列Java代码中的变量a、b、c分别在内存的____存储区

[单选题]
下列Java代码中的变量a、b、c分别在内存的____存储区存放。
class A {
    private String a = “aa”;
    public boolean methodB() {
        String b = “bb”;
        final String c = “cc”;
    }
}
  • 堆区、堆区、堆区
  • 堆区、栈区、堆区
  • 堆区、栈区、栈区
  • 堆区、堆区、栈区
  • 静态区、栈区、堆区
  • 静态区、栈区、栈区
堆区:存放一些类对象,可以线程共享;
方法区:静态存储区,存放class文件和静态数据,可以线程共享;
栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;
发表于 2017-04-12 16:05:57 回复(0)
更多回答
推荐
答案是C
a是类中的成员变量,存放在堆区
b、c都是方法中的局部变量,存放在栈区
编辑于 2015-11-15 11:19:41 回复(16)
堆区:只存放类对象,线程共享;
方法区:又叫静态存储区,存放class文件和静态数据,线程共享;
栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;
发表于 2016-09-25 10:22:52 回复(17)

发表于 2016-03-23 18:00:50 回复(15)
常量池:未经 new 的常量
堆区:成员变量的引用,new 出来的变量
栈区:局部变量的引用

成员变量的引用在堆区,是因为成员变量的所属对象在堆区,所以它也在堆区。见 https://blog.csdn.net/leunging/article/details/80599282
局部变量的引用在栈区,是因为局部变量不属于某一个对象,在被调用时才被加载,所以在栈区。

classA{

	privateString a = “aa”; // a 为成员变量的引用,在堆区,“aa”为未经 new 的常量,在常量池

	publicboolean methodB() {
		String b = “bb”; // b 为局部变量的引用,在栈区,“bb”为未经 new 的常量,在常量池
		final String c = “cc”; // c 为局部变量的引用,在栈区,“cc”为未经 new 的常量,在常量池
	}
}


编辑于 2019-03-03 22:25:10 回复(18)

成员变量和局部变量的区别

       成员变量:

          ①成员变量定义在类中,在整个类中都可以被访问。

          ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

          ③成员变量有默认初始化值。

      局部变量:

          ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

          ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

          ③局部变量没有默认初始化值 

      在使用变量时需要遵循的原则为:就近原则

      首先在局部范围找,有就使用;接着在成员位置找。

成员变量和静态变量的区别

      1、两个变量的生命周期不同

            成员变量随着对象的创建而存在,随着对象被回收而释放。

            静态变量随着类的加载而存在,随着类的消失而消失。

      2、调用方式不同

            成员变量只能被对象调用。

            静态变量可以被对象调用,还可以被类名调用。

      3、别名不同

            成员变量也称为实例变量。

            静态变量也称为类变量。

      4、数据存储位置不同

            成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

            静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

     成员变量、局部变量、静态变量的区别 

 

成员变量

局部变量

静态变量

定义位置

  在类中 , 方法外

方法中 , 或者方法的形式参数

在类中 , 方法外

初始化值

有默认初始化值

, 先定义 , 赋值后才能使用

有默认初始化值

调用方式

对象调用

---

对象调用,类名调用

存储位置

堆中

栈中

方法区

生命周期

与对象共存亡

与方法共存亡

与类共存亡

别名

实例变量

---

类变量


编辑于 2017-04-18 11:31:44 回复(13)
答案C。a全局变量,并且创建了一个对象,存在于堆区。方法methodB()存在方法区,方法里的b和c为局部变量存在与栈区。
发表于 2015-06-10 15:28:23 回复(0)
类中的成员变量,存放在堆区
方法中的局部变量,存放在栈区
发表于 2016-01-08 14:56:25 回复(2)
C
后面的赋值的字符串是放在静态区的,题目说的是 a b c  这三个变量
发表于 2015-11-19 18:25:45 回复(0)
可能疑惑的就一点,privateString a = “aa”;这个是在堆区。

因为它是类成员,当创建一个对象的时候。是在堆上开辟空间的,而它是对象的一部分,自然就是在堆上开辟的。


String a = “aa”这是在常量区开辟的。
发表于 2016-02-04 14:22:50 回复(0)

JAVA的JVM的内存可分为3个区:

堆(heap)
栈(stack)
方法区(method)

堆区:

1.存储的是new出来的对象和数组,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

栈区:

1.每个线程包含一个栈区,栈中保存的是所有的变量,包括基本类型和引用类型,栈中的每个变量都包含类型、名称、值这些内容,只不过基本类型变量的值为一个具体的值,而引用类型的变量的值为对象在堆中的地址。
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

方法区:

1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3.字符串常量池就是存放在方法区。

发表于 2018-10-26 19:21:55 回复(1)
类中的成员变量,实例化时随对象一起存储在堆中。
方法中的局部变量,在使用时存储在栈中,使用完后立即删除。
由于栈的空间有限,因此要避免在方法中使用过大的局部变量,以免栈空间不够用。
发表于 2016-04-22 10:45:47 回复(0)
这里需要明白的是未经new出来的字符串在常量区,new出来的所有东西(包括string),在堆区(这里是说带“”的字符串本身)。
而题目中的a,b,c是对常量区字符串的引用,而非字符串本身,所以对于A的实例,a作为成员变量存在于堆区,b和c作为方法体的局部变量,在该方法被调用时存在于栈区。
故答案是C。
发表于 2016-01-24 21:15:23 回复(0)
a:全局变量,存放在堆区
b和c都是局部变量:存放在栈区
所以选C
发表于 2015-06-11 16:13:51 回复(4)
常量池:未经 new 的常量
堆区:成员变量的引用,new 出来的变量
栈区:局部变量的引用
发表于 2022-03-09 16:35:17 回复(0)
对于第三个变量c,由于它是方法内的局部变量,所以存在栈区.
很容易迷惑人的地方就是,使用了final不是变成常量了吗?怎么还能存在栈区?
事实上,对于方法内的final局部变量,主要用于方法内部类的使用,Java的处理办法就是把final修饰的局部变量复制一份存在内部类中,以供方法结束后,内部类对象继续访问,所以看上去有了存在堆中一样的功能.
发表于 2019-03-26 11:55:23 回复(0)

没看到合理的答案,自己写吧

编辑于 2022-06-29 09:16:49 回复(0)
final 修饰的变量只能表示它是不可变的,不能代表它就是常量,如果是final static修饰的话就是常量了
发表于 2022-03-18 17:17:39 回复(0)
final修饰变常量不应该在常量池里吗?有没有懂哥说一下
发表于 2021-04-25 22:19:25 回复(0)
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
3.可存放类的成员变量
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
4.可存放类的局部变量。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
发表于 2019-09-16 16:37:06 回复(0)
我觉得这个地方需要明确的是string对象 还是 a b c的应用
发表于 2017-02-26 23:37:12 回复(0)
做选择题肯定是有技巧可言的,方法内的东西,肯定在栈去喽
发表于 2016-03-21 15:57:58 回复(4)