V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedBlackTree
V2EX  ›  程序员

请教大家,关于 string 的 immutable

  •  
  •   RedBlackTree · 2021-08-17 18:54:50 +08:00 · 1431 次点击
    这是一个创建于 1193 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大多数语言的 string 类型是 immutable 不可变的,这个不可变是单纯地由编译器类型检查保证,还是 string 所在的内存是 read-only 呢?
    换句话来讲,是否可以在运行时,分配只读内存中的空间,创建不可变的变量呢?
    5 条回复    2021-08-17 20:04:38 +08:00
    powerman
        1
    powerman  
       2021-08-17 19:13:20 +08:00
    看看 String 实现不就好了 ,java 里面的+号 也不过是一个语法糖,不过一大部分人的计算场景来讲,根本不用考虑字符串这个问题
    powerman
        2
    powerman  
       2021-08-17 19:13:47 +08:00
    @powerman 带来的性能影响问题 少之又少
    1194129822
        3
    1194129822  
       2021-08-17 19:34:19 +08:00   ❤️ 1
    思而不学则殆
    des
        4
    des  
       2021-08-17 20:04:36 +08:00   ❤️ 1
    只是编译器 or VM 保证了不变吧,看这个
    https://stackoverflow.com/questions/20945049/is-a-java-string-really-immutable
    secondwtq
        5
    secondwtq  
       2021-08-17 20:04:38 +08:00   ❤️ 1
    还是要分清 specification 和 implementation

    > 语言的 string 类型是 immutable 不可变的
    (是不是”大多数“就不扯了)
    这是 specification 规定的

    > 由编译器类型检查保证
    这是 implementation 用来 enforce specification 的手段

    > 所在的内存是 read-only
    这是 implementation 在特定条件下,以不违反 specification 前提做的优化
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:29 · PVG 19:29 · LAX 03:29 · JFK 06:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.