in the first statementa memory location called intvar actually holds numerical value such as (assuming such value has been placed therehoweverthe memory location bc does not hold the data of bankaccount object insteadit contains the address of bankaccount object that is actually stored elsewhere in memory the name bc is reference to this objectit' not the object itself actuallybc won' hold reference if it has not been assigned an object at some prior point in the program before being assigned an objectit holds reference to special object called null in the same wayintvar won' hold numerical value if it' never been assigned one the compiler will complain if you try to use variable that has never been assigned value in ++the statement bankaccount bc actually creates an objectit sets aside enough memory to hold all the object' data in javaall this statement creates is place to put an object' memory address you can think of reference as pointer with the syntax of an ordinary variable ( +has reference variablesbut they must be explicitly specified with the symbol assignment it follows that the assignment operator (=operates differently with java objects than with +objects in ++the statement bc bc copies all the data from an object called bc into different object called bc following this statementthere are two objects with the same data in javaon the other handthis same assignment statement copies the memory address that bc refers to into bc both bc and bc now refer to exactly the same objectthey are references to it this can get you into trouble if you're not clear what the assignment operator does following the assignment statement shown abovethe statement bc withdraw( )and the statement bc withdraw( )both withdraw $ from the same bank account object suppose you actually want to copy data from one object to another in this case you must make sure you have two separate objects to begin with and then copy each field separately the equal sign won' do the job