gpt4 book ai didi

java - 原始类型数组如何在 Java 中工作?

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:49 25 4
gpt4 key购买 nike

在java中,据说“除了原始类型之外的所有实例化的东西都是一个对象。”

我正在尝试使用以下代码(具体是第 4 行)来理解这一点。

public class dummy{
public static void main(String[] args){
int[] i = new int[2];
i[0] = new Integer(3); //line 4
i[1] = 3;
System.out.println(int[].class);
System.out.println(i[0]);
}
}

运行后

int[] i = new int[4];

Java 正在创建一个类型为 class [I 的对象 [0,0]。此对象中的两个成员 [0,0] 是原始数据类型(但不是引用类型)。

我的问题:

  1. 为什么 Java 允许按照以下行将对象分配给原始类型成员?

    i[0] = new Integer(3); // object of type 'class Integer' getting assigned to i[0]

    我怎么理解这个?在计数器中,i[0] 显示值 3 但不是对象地址。

  2. 类[I中的I是什么?我的意思是,对于 class C{};C[].class 给出 class [LC其中 [ 表示“数组”,LC 表示“‘C 类’的实例”

最佳答案

i[0] = new Integer(3);

这涉及到所谓的自动拆箱。在 Java 的黑暗时代(1.5 之前),我们曾经不得不显式地装箱和拆箱原始类型。但值得庆幸的是,语言设计者可怜我们可怜的手指,并添加了一些语法糖。他们现在让我们在原语和它们的包装器类型之间自由转换。 Java偷偷把上面的代码改成了这样:

i[0] = new Integer(3).intValue();

这就是自动拆箱。同样,它会为您装箱值,而无需您询问。如果你写:

Integer i = 5;

Java 实际上会执行:

Integer i = Integer.valueOf(5);

What is I in class [I?

这是 Iint

关于java - 原始类型数组如何在 Java 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com