Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中定义一个局部变量:整数a=100,其中为;100“;存储?_Java - Fatal编程技术网

在Java中定义一个局部变量:整数a=100,其中为;100“;存储?

在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,它会自动将首次加载到堆栈中

在java中,定义如下的局部变量:整数a=100。不使用new(),直接为其赋值100。那么值“100”存储在哪里?堆栈还是堆?

基本数据类型。Java中定义的八个原语是int、byte、short、long、float、double、boolean和char——它们不是对象,代表原始值。它们直接存储在堆栈上


但在这里,您并没有使用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存储在哪里。