[解決済み] KotlinのIntArrayとArray<Int>の比較
疑問点
の違いがよくわかりません。
IntArray
と
Array<Int>
がKotlinではどうなるのか、そしてなぜそれらを使い分けられないのか。
私が知っているのは
IntArray
は、次のように変換されます。
int[]
をターゲットにした場合
JVM
をターゲットにしたとき、しかし
Array<Int>
は何に変換されるのでしょうか?
また
String[]
または
YourObject[]
. なぜ Kotlin は
{primitive}Array
というクラスがあるのはなぜでしょうか?
どのように解決するのですか?
Array<Int>
は
Integer[]
の下にあり、一方
IntArray
は
int[]
. これだけです。
これはつまり
Int
の中に
Array<Int>
である場合、それは常にボックス化されます(具体的には
Integer.valueOf()
の呼び出し)。の場合は
IntArray
の場合、Javaのプリミティブ配列に変換されるため、箱詰めは起こりません。
上記の考えられるパフォーマンスへの影響以外に、考慮すべき利便性があります。プリミティブな配列は初期化しないままにしておくことができ、その配列にはデフォルトで
0
の値を持ちます。このため
IntArray
やその他の基本的な配列のコンストラクタが size パラメータのみを受け付けるのはこのためです。
val arr = IntArray(10)
println(arr.joinToString()) // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
これに対して
Array<T>
は size パラメータを受け取るだけのコンストラクタを持ちません:有効で非 null の
T
インスタンスが生成後に有効な状態である必要があります。そのため
Number
タイプでは、これはデフォルトの
0
のインスタンスを作成する方法はありません。
T
.
そのため
Array<Int>
を作成する場合、イニシャライザー関数も受け取るコンストラクタを使用することができます。
val arr = Array<Int>(10) { index -> 0 } // full, verbose syntax
val arr = Array(10) { 0 } // concise version
あるいは
Array<Int?>
を作成してすべての値を初期化する必要がないようにすることもできますが、その場合、後で可能性のある
null
の値を処理しなければならなくなります。
val arr = arrayOfNulls<Int>(10)
関連
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlinで配列を値で初期化する方法は?
-
[解決済み] Kotlinにコンストラクタ参照はありますか?
-
[解決済み] Kotlinで多くの例外を同時にキャッチするには?
-
[解決済み] KotlinでNullチェックを行う最良の方法とは?
-
[解決済み] Safeargsライブラリがディレクションクラスを生成しない
-
[解決済み] Kotlin データクラスのオーバーライドゲッター
-
[解決済み] Kotlinのゲッターとセッター
-
[解決済み] Kotlin: withContext() vs Async-await
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] アルファベットの全文字の配列を生成するためのより良い方法
-
[解決済み] Kotlinにコンストラクタ参照はありますか?
-
[解決済み] Kotlinで多くの例外を同時にキャッチするには?
-
[解決済み] KotlinでNullチェックを行う最良の方法とは?
-
[解決済み] Safeargsライブラリがディレクションクラスを生成しない
-
[解決済み] Kotlin データクラスのオーバーライドゲッター
-
[解決済み] KotlinでJavaのようにサイズを指定して配列を作成するには?
-
[解決済み] Kotlinのゲッターとセッター
-
[解決済み] Kotlin: withContext() vs Async-await