技术开发 频道

String类和stringBuffer类字符串的区别

  【IT168技术文档】

  前面看到有人写String和stringBudffer的区别是前者是不能改写的,后者是可以改写的

  我觉得说String的字符串不能改变话是不错,但是例子要举好

  看看下面这个简单的例子:

  首先,

  public class xx {   public static void main(String[] args) {   String s1 = "You are hired!";   String s2 = "You are hired!";   if (s1==s2) {   System.out.println("一个内存空间");   } else {   System.out.println("不是一个内存空间");   }   }   }

  打印的结果是:一个内存空间

  这里==的意义是两个操作数是否指向同一个对象

  可见s2在不用new创建的情况下会自动检索到具有相同内容的内存空间中共享,那么既然s1和s2共享了同一个对象

  再看下面的代码

  public class xx {   public static void main(String[] args) { String s1 = "You are hired!";   String s2 = "You are hired!";   s1 = s1.replace('h','f');   System.out.println(s1);   if (s1==s2) {   System.out.println("一个内存空间");   } else {   System.out.println("不是一个内存空间");   }   }   }

  代码结果是

  You are fired!

  不是一个内存空间

  可见,String中s1的内容虽然被改写,但是已经不在是原来第一次分配到的那个内存空间,也就是String类的内容能被改变,但一旦改变系统将为其分配新的内存

  说到与stringBuffer的区别,从根本上来说应该是

  stringBuffer在做字符长度变动的时候将继续使用原来的内存空间,不新分配.

  而String的长度一旦变动,就如上面的例子一样,其内部将分配新的内存空间.

0
相关文章