パフォーマンスは常に難しい問題です。コンテキストに応じて、そのようなチェックは完全に最適化されるかもしれません。たとえば:
public static void main(String[] args){
Object[] array = new String[2];
array[0] = "Hello, World!";//compiler knows this is safe
System.out.println(array[0]);
array[1] = new Object();//compiler knows this will throw
}
ここで、コンパイラは、両方の割り当て時に、配列の実際の型へのアクセス権を持っているので、実行時のチェックはコンパイラが十分に賢いであれば、それはそれらを最適化することができます(厳密には必要ではありません)。この例では、しかし、実行時のチェックが必要である
:あなたは場所を取ることができ、心曲げジャストインタイムの最適化を検討する際に
public static void main(String[] args){
Object[] array = Math.random()<.5? new String[2]: new Object[2];
array[0] = "Hello, World!";//compiler knows this is safe
System.out.println(array[0]);
array[1] = new Object();//compiler must check array type
}
物事はさらに複雑になります!全体としては、Javaの安全機能の多くと同様に、必要なパフォーマンスコストがあります。目立つかどうかは、ユースケースによって異なります。
同値質問について:いいえ、これは不変配列を持つことと同じではありません。不変の配列は、Object[] array = new String[2];
をコンパイル時エラーにします。
downvoteの場合、私が間違っていることを教えて、少なくとも私を助けてくれますか?あなたがこの質問に問題があるかどうか、これは重複した質問である場合、またはあなたが私よりもグーグルでよりうまくいる場合、 – Poptart
コード質問や特定の質問をしていないので、おそらく投票が中止されました。このように見えるのは、https://softwareengineering.stackexchange.comのディスカッションに適しています。 – tima