Java 基础知识 - String 为什么是不可改变的_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 基础知识 - String 为什么是不可改变的

Java 基础知识 - String 为什么是不可改变的

 2013/12/2 15:26:15  zhaoshengxuan108  程序员俱乐部  我要评论(0)
  • 摘要:String字符串不可改变,查阅了很多资料,本人感觉《Java经典实例(第二版)》.达尔文著书中说的很好,在这本书中对String字符串不可改变的问题做如下论述:字符串的不变性是Java虚拟机的一个基本特征。Java是一种基于多线程的语言,并且还要提供良好的安全性。Java的Applet被禁止访问很多的本地资源。假设这样一种情况:线程A启动了线程B。线程A创建了一个包含文件名的字符串,命名为s,同时,为该字符串另设引用s2。这时,将s传给需要权限的某种方法。假如已经载入该方法(例如
  • 标签:Java 什么 为什么 基础知识

? ? ? ?String字符串不可改变,查阅了很多资料,本人感觉《Java经典实例(第二版)》.达尔文著书中说的很好,在这本书中对String字符串不可改变的问题做如下论述:

? ? ? ?字符串的不变性是Java虚拟机的一个基本特征。Java是一种基于多线程的语言,并且还要提供良好的安全性。Java的Applet被禁止访问很多的本地资源。假设这样一种情况:线程A启动了线程B。线程A创建了一个包含文件名的字符串,命名为s,同时,为该字符串另设引用s2。这时,将s传给需要权限的某种方法。假如已经载入该方法(例如:它存在于Java的Applet运行环境中),它一定会使用Java虚拟机的SecurityManager对象。由SecurityManager对象认可对指定文件的访问,如果获得认可,该方法就可以通过I/O系统打开文件。就在这两项工作之间的瞬间,线程B修改了s2所引用的字符串,使其引用一个系统文件。如果是这样的话,那么Java的整个安全机制就成了天方夜谭了。实事上,这是无法做到的。虽然你可以分配任何新的String对象引用给s,但对s所引用的字符串却没有任何影响。此外,如果s只是该String对象的唯一引用,那么这将有利于垃圾回收。

?

发表评论
用户名: 匿名