String的坑

2018-12-24 09:09:29来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

    想必大家在熟悉不过了,不错今天就遇到了这个万年坑,哪怕喜欢翻源码的人,也不屑一顾翻它的源码,良言相劝最好翻下源码。

   1. String为啥被定义为final ?

   2. String是线程安全的么 ?

   3. String的设计思想是什么 ?

   4. 偏移量是什么 ?

   在不看下面解释的时候自己想想,是不是真的了解,每天都能遇见的String这个对象 ???

   先说String是线程安全的么?

   答:是线程安全的,都定义final(不可变)了,这都不安全什么才算安全,必须要看到 synchronized ?

   再说String为啥被定义为final?

      答:因为这样有助于共享,提高性能,可以将字符串对象保存在字符串常量池中以供与字面值相同字符串对象共享。如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,将同时改变一起共享字符串对象的其他 String类型变量所引用的对象的值。String本质是个char数组. final修饰的字段创建以后就不可改变,String设成final禁止继承,避免被其它类继承后破坏。

    /** The value is used for character storage. */
     private final char value[];

    String的设计思想是什么?

    答:java程序语言的许多特性依赖于不可变的String对象,若String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能

    偏移量是什么?

    答:就是在数组中(int[] ary={1,2,3})。变量名(ary)保存的是数组的首地址,数组实际的内存是一块连续的内存区域。所以ary[i]就是相对数组首地址的便宜量,即就是根据首地址和偏移量([i])就可以知道偏移后的地址,这也是为什么在java中你可以用ary[i]访问元素的根本原因。

 

 

 

    

   

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java实现word转pdf在线预览(前端使用PDF.js;后端使用openoffic

下一篇:Spring中的Bean的配置形式