I've run into this code from geeksforgeeks. And I didn't figure out why `toString` method is invoked due to `System.out.println(c2)` . I've expected that output is `c2` object's address. 

```
final class Complex {
    private  double re,  im;
    public Complex(double re, double im) {
        this.re = re;
        this.im = im;
    }
    Complex(Complex c)
    {
      System.out.println("Copy constructor called");
      re = c.re;
      im = c.im;
    }            
    public String toString() {
        return "(" + re + " + " + im + "i)";
    }            
}
class Main {
    public static void main(String[] args) {
         Complex c1 = new Complex(10, 15);
        Complex c2 = new Complex(c1);    
        Complex c3 = c1;  
        System.out.println(c2);
    }
}

```

Output is: 

```
  Copy constructor called  
(10.0 + 15.0i)

```