เหตุใดคอมไพเลอร์จึงห้ามการเริ่มต้นอาร์เรย์ [ทำซ้ำ]

เหตุใดคอมไพเลอร์จึงห้ามการเริ่มต้นอาร์เรย์

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 แหล่งที่มา
comment
คุณได้รับข้อผิดพลาดอะไร?   -  person marstran    schedule 05.08.2019


คำตอบ (2)


เมื่อคุณประกาศอาร์เรย์ คุณสามารถใช้ไวยากรณ์ public int[] arr = {1,2}; ได้ แต่หลังจากการประกาศเมื่อคุณพยายามเริ่มต้นอาร์เรย์ที่อื่น (พูดในวิธีการ) คุณจะไม่สามารถใช้ชวเลขที่คุณต้องทำเช่น arr = new int[]{1,2};

เนื่องจากเมื่อคุณประกาศอาร์เรย์และกำหนดค่าเริ่มต้นด้วยค่าบางค่า public int[] arr = {1,2}; พื้นที่สำหรับสมาชิกอาร์เรย์ (สองค่าในกรณีนี้) จะถูกจัดสรรและไม่สามารถแก้ไขได้ในภายหลัง เว้นแต่คุณจะสร้าง วัตถุอาร์เรย์ใหม่ และกำหนดให้กับฟิลด์นั้นอีกครั้ง คุณสมบัติ สุดท้าย length ของวัตถุอาร์เรย์จะถูกตั้งค่าเมื่อคุณประกาศโดยใช้ตัวเริ่มต้นอาร์เรย์

แต่ต่อมาเมื่อคุณทำ arr = new int[]{1,2}; คุณกำลังสร้างวัตถุอาร์เรย์ใหม่และ กำหนด ให้กับฟิลด์ที่ประกาศไว้แล้ว

TL;DR:

ไวยากรณ์ตัวสร้างอาร์เรย์ {} ได้รับอนุญาตเฉพาะในระหว่างการประกาศอาร์เรย์ โดยที่ไวยากรณ์ตัวสร้างอาร์เรย์ new type[]{} ได้รับอนุญาตหลังจากการประกาศในคำสั่งการกำหนด

person Fullstack Guy    schedule 05.08.2019

เมื่อคุณสร้างอาร์เรย์ที่คุณต้องทำ

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