//[a1
public class Q1
{
    public static void main(String[] args)
    {
	PhoneNumber          ahPhone, dbPhone, nhPhone, temp;

	ahPhone = new PhoneNumber(540,568,2774);
	dbPhone = new PhoneNumber(540,568,1671);
	nhPhone = new PhoneNumber(540,568,8771);
//]a1
//[a2
	System.out.printf("\nInitialization\n");
	System.out.printf("ahPhone  @ %d\n", MemoryTracker.addressOf(ahPhone));
	System.out.printf("dbPhone  @ %d\n", MemoryTracker.addressOf(dbPhone));
	System.out.printf("nhPhone  @ %d\n", MemoryTracker.addressOf(nhPhone));
	System.out.printf("\n");
	System.out.printf("ahPhone  : %s\n", ahPhone.toString());
	System.out.printf("dbPhone  : %s\n", dbPhone.toString());
	System.out.printf("nhPhone  : %s\n", nhPhone.toString());
//]a2
//[a3a
	temp    = ahPhone;
        ahPhone = dbPhone;
        dbPhone = temp;
//]a3a
//[a4
	System.out.printf("\nAfter swap\n");
	System.out.printf("ahPhone  @ %d\n", MemoryTracker.addressOf(ahPhone));
	System.out.printf("dbPhone  @ %d\n", MemoryTracker.addressOf(dbPhone));
	System.out.printf("nhPhone  @ %d\n", MemoryTracker.addressOf(nhPhone));
	System.out.printf("temp     @ %d\n", MemoryTracker.addressOf(temp));
	System.out.printf("\n");
	System.out.printf("ahPhone  : %s\n", ahPhone.toString());
	System.out.printf("dbPhone  : %s\n", dbPhone.toString());
	System.out.printf("nhPhone  : %s\n", nhPhone.toString());
//]a4
//[a3b
    }
}
//]a3b
