mengapa kompiler melarang inisialisasi array? [duplikat]

mengapa kompiler melarang inisialisasi array?

class Matrix {
    public int[] arr = null;
}

public class Main {
    public static void main(String[] args) {
        Matrix matrix = new Matrix();
        matrix.arr = {1, 2}; // compile error
        System.out.println(matrix.arr[0]);
    }
}

person SergiiGusar    schedule 05.08.2019    source sumber
comment
Kesalahan apa yang Anda dapatkan?   -  person marstran    schedule 05.08.2019


Jawaban (2)


Saat Anda mendeklarasikan sebuah array, Anda dapat menggunakan sintaks public int[] arr = {1,2};, tetapi setelah deklarasi ketika Anda mencoba menginisialisasinya di tempat lain (katakanlah dalam suatu metode) Anda tidak dapat menggunakan singkatan yang Anda perlukan untuk melakukannya seperti arr = new int[]{1,2};.

Hal ini karena ketika Anda mendeklarasikan sebuah array dan menginisialisasinya dengan beberapa nilai public int[] arr = {1,2}; ruang untuk anggota array (dalam hal ini dua) dialokasikan dan tidak dapat diubah nanti kecuali Anda membuat objek array baru dan tetapkan ke bidang itu lagi. Properti final length objek array disetel saat Anda mendeklarasikannya menggunakan penginisialisasi array.

Namun nanti ketika Anda melakukan arr = new int[]{1,2}; Anda sebenarnya membuat objek array baru dan menetapkan ke bidang yang sudah dideklarasikan.

TL;DR:

Sintaks penginisialisasi array {} hanya diperbolehkan selama deklarasi array dimana sintaks konstruktor array new type[]{} diperbolehkan setelah deklarasi dalam pernyataan penugasan.

person Fullstack Guy    schedule 05.08.2019

Saat Anda membuat array yang perlu Anda lakukan

matrix.arr = new int[]{1,2};
person mwarren    schedule 05.08.2019