Since String objects in Java are immutable while StringBuilder and StringBuffer are mutable, how does immutability work when a String is created as a literal compared to using new String()? Also, why does StringBuilder initialize with a default capacity of 16 characters?