متغیرهای primitive که شامل int, char, double, float, byte, boolean هستند، مثل c++ هست. ولی آبجکتها کلا به صورت اشاره ای هستند همینطور تعریف می شوند. همینظور در مورد متغیرهای non-primitive مثل Boolean,Integer,Float,...
مثلا
Student a =new Student();
a یک اشاره گر به یه شی از نوع Student است که آدرس آنرا در خود دارد و بدون داشتن آدرس آن دسترسی به آن ممکن نیست. ولی در سی پلاس پلاس اگر بنویسیم
Student a();
a یک محل از حافظه است که محتویات a را در خود دارد و باتغییرa مثلا
Student b();
b.name="s1";
a=b;
مقدار a با مقدار b برابر میشود و مثلا نام تغییر میکند ولی مثلا در جاوا اگر داشته باشیم:
Student a =new Student();
Student b= new Student(ali,alavi);
a=b;
در واقع آدرسی که a به آن اشاره میکند عوض شده و با آدرسی که b به آن اشاره میکند برابر میشود. درواقع آن قسمت از حافظه که توسط a قبلا قابل دسترس بود از دسترس خارج می شود. اگر بخواهیم همین سبک برنامه رابه زبان c++ بنویسیم میشود:
Student *a=new Student();
Student *b= new Student("ali","alavi");
a=b;
برای اطلاعات کاملتر سیت جاواکاپ اموزشهای خوبی داره. و لینک https://stackoverflow.com/questions/3820178/what-is-the-main-difference-in-object-creation-between-java-and-c یه سر بزنید.