java 中转换和加载的区别?

Difference between converting and loading in java?

我有一个关于在 java 中转换和加载的问题。如果你使用例如long='A'。 Java https://docs.oracle.com/javase/specs/jvms/se16/html/jvms-6.html 处的虚拟机规范将此指定为转换。这里 char 被转换为 long.

但是,如果一个值在变量或数组中,那么 Java 不再是转换,而是加载。这里它说然后加载数组值而不是转换。我之前也知道,如果一个人使用另一种数据类型的变量,这个变量不会被转换,但是通过中间步骤它的信息被获取并且它的信息被转换,而不是变量。 Java 此处描述的转换和加载之间到底有什么区别:https://docs.oracle.com/javase/specs/jvms/se16/html/jvms-6.html?

转换的 JVMS 用法

JVMS 使用负载

转换将值从一种类型更改为另一种类型。

正如 d2f 指令的文档所述,堆栈顶部的双精度值被转换为浮点数并作为浮点数推回堆栈。

加载是将相同类型的值从一个地方移动到另一个地方,而不对该值进行任何更改。

你说的是 JVM 指令,Java 就是编译成的指令。

Java 根据需要进行转换,例如:

        double d = 1.0;
        float f = (float)d;

将导致从 double 到 float 的转换,大概是使用上面的 d2f 指令实现的。

   double[] a = new double[5];
   double d = a[0];

将从数组中的单元格中加载一个值到变量 d,但不会发生任何转换。

   float f = (float)a[0];

将执行转换。