举例说明下问题。比如我定义两个变量如下。 int a=3;
int b=3; 一般是这样来理解的。即首先在栈中分配一个名为a和b的内存空间。然后将3分别存进去。因为这有别于new产生的对象的对象引用。对象引用存储的是堆中的入口地址。但我又在网上看到对基本数据类型存储的过程中夜存在‘引用’。为节省时间,将问题罗列如下:
1.对于 int a=3;语句,在执行时,栈中的具体指令执行情况。说的越具体越好。
2.Java中有几种存储区?每个存储区的作用?(涉及成员变量,方法,方法的参数,局部变量,对象,常量,代码)
3.常量都是有类型的,那么它们存储在哪里的呢?
int b=3; 一般是这样来理解的。即首先在栈中分配一个名为a和b的内存空间。然后将3分别存进去。因为这有别于new产生的对象的对象引用。对象引用存储的是堆中的入口地址。但我又在网上看到对基本数据类型存储的过程中夜存在‘引用’。为节省时间,将问题罗列如下:
1.对于 int a=3;语句,在执行时,栈中的具体指令执行情况。说的越具体越好。
2.Java中有几种存储区?每个存储区的作用?(涉及成员变量,方法,方法的参数,局部变量,对象,常量,代码)
3.常量都是有类型的,那么它们存储在哪里的呢?
堆栈,堆,常量存储区
如Test.javapublic class Test {
private static final int final_value = 5;
public static void main(String[] args) {
int a = 3;
int b = 3;
int c = final_value;
}
}javac Test.java
javap -c Test
得到输出:Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: returnpublic static void main(java.lang.String[]); //main方法对应的指令序列
Code:
0: iconst_3
1: istore_1
2: iconst_3
3: istore_2
4: iconst_5
5: istore_3
6: return}指令的意义可以去看jvm规范:http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html