JVM バージョン 8 の仕様のセクション 4.10.2.2 ( https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html ) のバイトコードの検証方法を読んでいます。この場合、スタックに、あるソースから来る場合は int[] を持つスロットが含まれ、別のソースから来る場合は String[] を持つスロットが含まれるとき、制御フローで何が起こりますか。
以下を読みましたが、JVM バージョン 7 のドキュメントにはありませんでした。
対応する値が両方とも配列参照型である場合、それらの次元が調べられます。配列型の次元が同じ場合、マージされた値は、両方の配列型の最初の共通スーパータイプである配列型のインスタンスへの参照です。(配列型のいずれかまたは両方にプリミティブ要素型がある場合、代わりに Object が要素型として使用されます。)
...
int[] と String[] もマージできます。最初の共通スーパータイプを計算するときに、int の代わりに Object が使用されるため、結果は Object[] になります。
これは、int[] を Object[] にキャストできることを意味するため、私には意味がありません。しかし、プリミティブ型の Java 配列は Object[] にキャストできません。
誰かがこの背後にある理論的根拠を説明できますか?