Question: In java all methods are pass by value.But today i learnt that constructors are pass by reference.

```
// Attack the internals of a Period instance
Date start = new Date();
Date end = new Date();
Period p = new Period(start, end);
end.setYear(78);  // Modifies internals of p!

```

This works and is able to edit the private fields.

What is the reason of this decision? or am i missing something?

Answer: 
It will work same way for other method. Actually reference is passed by value.

```
Class A{
   B b;
   void setB(B b) {
       this.b = b;
   }
};

A a;
B b;
A.setB(b);

b.change(); //changed in A

```

What it means that reference is passed by value?

```
void f(A a) {
    a.change(); // caller will see that object is changed. We change it using reference
    a = new A(); // we change the value of refernce. No changes are visible outside the function
    a.change(); //new object is changing. No changes are visible outside the function
}

```

Basically you just pass address of object (integer) by value. Everything is integer. Your class contains integer. And it didn't change. The objects on that address did.
You are dealing with only references,not objects.

The classic definition of pass by value.

*The value of a reference variable is an "address" in Java. When you pass a reference variable to a method, a new reference variable is placed on the stack and a copy of the passed reference variable's value is used to initialize the new local **reference varaible's value, just like any primitive type.***

**NOTE**: While you can think of the reference as a memory address, it's not. The underlying mechanism makes it act logically as if it were though.

**SHORT VERSION**: references are simple variables just like the other primitive types for purposes of passing arguments to methods. What you can do with them once passed is obviously different.