在Java中定义一个局部变量:整数a=100,其中为;100“;存储?
在java中,定义如下的局部变量:整数a=100。不使用new(),直接为其赋值100。那么值“100”存储在哪里?堆栈还是堆?基本数据类型。Java中定义的八个原语是int、byte、short、long、float、double、boolean和char——它们不是对象,代表原始值。它们直接存储在堆栈上在Java中定义一个局部变量:整数a=100,其中为;100“;存储?,java,Java,在java中,定义如下的局部变量:整数a=100。不使用new(),直接为其赋值100。那么值“100”存储在哪里?堆栈还是堆?基本数据类型。Java中定义的八个原语是int、byte、short、long、float、double、boolean和char——它们不是对象,代表原始值。它们直接存储在堆栈上 但在这里,您并没有使用int,而是通过使用Integer类强制java使用对象,从而将其存储在堆中。如注释中所述,对该对象的引用存储在堆栈中。通过将a分配给100,它会自动将首次加载到堆栈中
但在这里,您并没有使用int,而是通过使用Integer类强制java使用对象,从而将其存储在堆中。如注释中所述,对该对象的引用存储在堆栈中。通过将
a
分配给100
,它会自动将首次加载到堆栈中的整数值装箱到对象引用中,integer
类型。然后将引用存储到堆栈上
您可以通过创建一个类来验证这一点,如下所示:
公共类测试{
公共静态void main(字符串[]args){
整数foo=100;
}
}
编译类(javactest.java
)并反汇编字节码(javap-ctest
)
输出:
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: bipush 100
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
6: return
}
从“Test.java”编译而来
公开课考试{
公开考试();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:bipush 100
2:invokestatic#2//方法java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5:astore_1
6:返回
}
int值是整数对象中的一个字段。所以他们没有问引用存储在哪里。他们询问值100存储在哪里。