Do i need any 'new' to create properly objects c1 c2 c3?
No. "new" is called somewhere in read(), or in a method called by read(). Function return values don't need "new" because they are already instantiated before they are returned to the caller.
Is correct create the same object two times with different parameters, like here where there are two instances of c :
It is correct to reuse variable names, but I try to avoid it. It can cause confusion. It is easier to debug if variable names are not reused and the lifetime of variables are kept to a minimum.
Remember, c is just a variable name.
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = sb1;
StringBuffer sb3 = sb1;
Here we create only one StringBuffer. sb1, sb2, and sb3 all reference the same object.
If we call do this.
sb2.append("Hello"

;
sb1.append("World"

;
System.out.println(sb3);
we will print: HelloWorld
We can also create an object without assigning it to a variable name like this:
Vector v = new Vector();
v.add(new Complejo(1.1, 1.1));
Here Compejo is not assigned to a variable name, but is stored in a Vector.
Sean McEligot