zoukankan      html  css  js  c++  java
  • 5.4 String

    JAVA 中为什么String immutable?

    1.设计:当创建一个String(String str2 = "abc"), 如果它(原先有一个String str = "abc")已经在pool(其实是内存中的栈)中存在,则会返回已存在String的引用,相反,怎会创建一个新的String,并返回该引用。如果String不是immutable的,改变String的一个引用将导致另一个引用的到错误的值。

    2.效率:允许String缓存它的hashcode。String的hashcode在JAVA中是使用非常频繁的。例如在HashMapzhong, String设计成immutable保证了hashcode总是一样的,所以hashcode可以被缓存而不用担心改变。也就是说,不需要每次在使用hashcode时都去计算一遍,这样更高效。

    3. 安全:String广泛的作为参数被JAVA中的类使用,比如 网络连接,打开的文件等等,如果String不是immutable,一个连接或文件的改变将导致严重的安全威胁,一个方法还以为正连接到一个机器上,并其实没有。可变的String同样将导致反射的安全性问题,因为反射中的参数都是String类型的。

    【附】StringStringBufferStringBuilder

    三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

    String:字符串常量   StringBuffer:字符串变量    StringBuilder:字符串变量

      从上面的名字可以看到,String是常量, 而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。再有,StringBuilder是线程非安全的,而StringBuffer是线程安全的,所以StringBuilder速度最快。

  • 相关阅读:
    RS-232 vs. TTL Serial Communication(转载)
    UART to Serial Terminal(转载)
    UART Explained(转载)
    Gprinter热敏打印机光栅位图点阵数据解析工具
    WinCE非通用调试工具汇总
    WinCE下GPRS自动拨号软件(GPRS AutoDial)
    WinCE项目应用之车载导航
    mysql创建临时表,将查询结果插入已有的表
    mysql利用navicat导出表结构和表中数据
    mysql查看表的属性 mysql将查询结果给临时变量
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6062905.html
Copyright © 2011-2022 走看看