String对象时不可变的。查看JDK文档就会发现,String类中每一个看起来会修改String值得方法,实际上都是创建一个全新的String的对象,以包括修改字符创的内容。而最初的String对象则丝毫不动。
1 public class Demo1 { 2 3 static void StringTest() { 4 String s1 = "1"; 5 System.out.println(s1.hashCode());//49 6 s1 = s1 +"1"; 7 System.out.println(s1.hashCode());//1568 8 } 9 10 public static void main(String[] args) { 11 StringTest(); 12 } 13 }每当把String对象作为方法的参数时,都会复制一份引用,而改引用所指的对象其实一直待在单一的物理位置上,从未动过。对于一个方法而言,参数时为该方法提供信息的,而不是想让该方法改变自己的。
1 public class Demo2_Immutable { 2 public static String upcase(String s) { 3 System.out.println(s + "____" + s.hashCode());//howdy____99470565 4 return s.toUpperCase(); 5 } 6 public static void main(String[] args) { 7 String q = "howdy"; 8 System.out.println(q + "____" + q.hashCode());//howdy____99470565 9 String qq = upcase(q); 10 System.out.println(qq + "____" + qq.hashCode());//HOWDY____68932805 11 System.out.println(q + "____" + q.hashCode());//howdy____99470565 12 } 13 }
转载于:https://www.cnblogs.com/jaerma66/p/6526001.html
