30/09/2018, 22:22

Tại sao khi in dòng thứ 3 thì giá trị của y vẫn không đổi?

class X
{
    static int x = 3131;
     
    static class Y
    {
        static int y = x++;
         
        static class Z
        {
            static int z = y++;
        }
    }
}
 
public class MainClass
{
    public static void main(String[] args)
    {
        System.out.println(X.x);
         
        System.out.println(X.Y.y);
         
        System.out.println(X.Y.Z.z);
    }
}
X viết 00:28 ngày 01/10/2018

static (variable, method, initializer block…) nói chung thì được khởi tạo/gọi trước tiên khi class được load. Phép tăng ++ (increment) ở đây để cho vui chứ không có tác dụng gì vì y và z nằm ở 2 “phân khu” khác nhau, => chỉ như một phép gán thông thường a = b

Ben Nguyen viết 00:25 ngày 01/10/2018

Increment có sự khác biệt chứ bạn, có 2 kiểu increment là post-increment y++( trả về y trước, sau đó mới tăng sau, nhưng trong bộ nhớ nó sẽ được gán giá trị được tăng) , kiểu 2 là ++y pre-increment ( tăng giá trị của y sau đó mới return giá trị của y) . Nhưng trong trường hợp này, mình không hiểu cách cấp phát của bộ nhớ của thằng static inner class nó như thế nào? Nếu bạn hiểu bạn có thể phân tích luồng của chương trình chạy được không?

Bài liên quan
0