Mình thấy bên Java rạch ròi hơn chứ nhỉ. Vì nó là OOP thuần tuý nên cái gì cũng phải OOP.
Bản chất của thao tác là với đối tượng, không phải là với tham chiếu.
Khí bạn gán A a = new A(); thì a là tham chiếu, new A() là đối tượng.
Đôi khi bạn không cần tiếp tục tham chiếu đến một đối tượng sau khi thực hiện 1 phép tính với đối tượng đó, thì bạn có thể truyền trực tiếp đối tượng thay vì truyền tham chiếu:
B = doSomethingWith (new A());
thay vì
A a = new A();
B = doSomethingWith(a);
Có thể thấy, trong C++, cách khởi tạo thông thường buộc bạn phải có một tham chiếu cho đối tượng, còn trong Java thì khởi tạo không bắt buộc phải tham chiếu.