首页 > 其他 > 详细

如何理解String 代表不可变的字符序列,即String 字符串的不可变性

时间:2020-04-29 22:25:51      阅读:120      评论:0      收藏:0      [点我收藏+]

String 概述

String 字符串,使用一堆"" 引起来表示。

  • 1.String 类是final的,表示不可被继承。
  • 2.String 实现了Serializable 接口,表示字符串是支持序列化的。
    String 实现了Comparable 接口:表示String 是可以比大小的。
  • 3.String 内部定义了 final cha[] value 用于存储字符串数据,即String 底层都是以cha[] 型数组存储的。

String 的不可变性理解

String 代表不可变的字符序列。简称:不可变性

体现1: 当对字符串重新复制时,需要重写指定内存区域赋值,不能使用原有的value 上赋值。

如下代码:

    String s1 = "abc";//通过字面量方式定义字符串
    String s2 = "abc";

    s1 = "hello";
    System.out.println(s1 == s2);//比较s1 和s2 的地址值
    System.out.println(s1);//hello
    System.out.println(s2);//abc

上述代码,给s1 重新赋值时,其实是在内存方法区的字符串常量池里,重新创建了一个名为hello的字符串,将hello 的首地址,重新赋值给s1。

过程如下:

  • 当先声明两个s1 和 s2 同时为"abc"时,内存示意图如下:

技术分享图片

  • 当给s1 重新赋值时,内存示意图如下:

技术分享图片

体现2: 当对字符串进行连接操作时,也需要重新指定内存区域赋值,不能再原有value上赋值。

如下代码

声明了一个String 变量s3,此时给s3加上"def",其实是在内存中重新创建了如 "abcdef"的字符串常量,再将这个字符串常量的首地址关联到s3

    String s3 = "abc";
    s3 += "def";
    System.out.println(s3);//abcdef

如何理解String 代表不可变的字符序列,即String 字符串的不可变性

原文:https://www.cnblogs.com/vpersie2008/p/12805247.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!