美文网首页
Java中String为什么是不可变的

Java中String为什么是不可变的

作者: 台风口的猪 | 来源:发表于2019-11-20 10:46 被阅读0次

区分对象和对象的引用

  String s = "zhangsan"
  System.out.println("s = " +s);
  s = "lisi";
  System.out.println("s = "+s);
  打印结果为
  s = zhangsan
  s = lisi

误区

虽然上面的打印结果s 改变了但是并不是String对象改变了,而是s(s只是一个String对象的引用)
对象 在内存中是一块内存区,成员变量越多,这块内存区站的空间越大
引用 只是一个4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象

由图可知,s只是重新指向了一个新的对象,而原来的对象"zhangsan",还在内存中,并没有改变

为什么String对象是不可变的

 
public final class String
   implements java.io.Serializable, Comparable<String>, CharSequence {
   /** The value is used for character storage. */
   private final char value[];

   /** Cache the hash code for the string */
   private int hash; // Default to 0
}

从代码private final char value[]中可以看出,在java中String类其实就是对字符数组的封装


所以在执行String s = "zhangsan",String在内存中真正的布局

因为value 呗private final 修饰所以它在外部和子类中都不可以被修改,所以就可以认为String对象是不可变对象。

参考:https://blog.csdn.net/zhangjg_blog/article/details/18319521#commentsedit

相关文章

网友评论

      本文标题:Java中String为什么是不可变的

      本文链接:https://www.haomeiwen.com/subject/zajwictx.html