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: 
You've got that wrong:

> 
> In java all methods are pass by value.
> 
> 
> 

Instead: In Java all parameters are passed by value, even references are passed by value. 

You don't "pass objects", only references to objects. This is the same for methods and constructors.

So 

```
end.setYear(78);  // Modifies internals of p!

```

does not change the reference but only the object the reference points to.
the mechanism is same for both constructor and method. From the [doc](http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html)

> 
> Reference data type parameters, such as objects, are also passed into
>  methods by value. This means that when the method returns, the
>  passed-in reference still references the same object as before.
>  However, the values of the object's fields can be changed in the
>  method, if they have the proper access level
> 
> 
>