I think the sharing state
here means that non-primitive variables are always references to objects in memory. And those objects are "shared" between those variables.
I.e. you can have this with non-primitive types :
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = sb1;
sb1.append("change thru sb1");
sb2.append(" change thru sb2");
// will print both modifications, since sb1 & sb2 refer to the same object
System.out.println(sb1);
and you can't have this with primitives as they always maintain their own copy of data.