Since you don't instantiate another String instance, your options are all the same reference (in this example).
Considering your initial call(s), we could force them to have different reference values (I don't know why you would do this, and there are consequences - namely growing the intern cache);
this.str=in;
this.bar=new Bar(in); // option 1
this.bar=new Bar(this.str); // option 2
This will change the references.
this.str = new String(in); // <-- create a new String from in.
this.bar = new Bar(in); // <-- keeps the original reference to in.
StringBuilder sb = new StringBuilder(in); // <-- create a StringBuilder.
this.bar = new Bar(sb.toString()); // <-- create another String.