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

   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]访问元素的根本原因。

    

   

String的坑的更多相关文章

  1. String trim 坑 对于ascii码为160的去不掉

    大家在使用string   的trim去除空格的时候,要注意一个坑呀,对于ascii码为160的去不掉 import java.util.Arrays; /** * Created by bjchen ...

  2. fastjson将json转为Map<String,String>踩坑

    字符串 对于一个json字符串 String str = "{"specItem":"[红, 大]","specName":&qu ...

  3. JavaSE 第二次学习随笔(String的坑 + ==)

    String 类是一个final类, 其内部是使用的 private final char value[]; 来存储内容, 其既可以当作一个基本类型来使用也可以当作一个类来使用;final 类(Str ...

  4. 高精度乘法,string中的坑

    #include "bits/stdc++.h" using namespace std; ]; ]; int main() { while(cin >> a > ...

  5. C# 参数签名字符串按 ASCII码排序,注意其中的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  6. 参数签名ascii码排序的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  7. C# 汉语转拼音

    汉语转拼音或首字母 通常不少网站上有汉语转拼音功能,今天就小记下这段汉语转拼音的代码,自己测试ok,现把代码贴出来,以备日后使用: 效果 用法很简单后台使用到了两个类文件,一个是:ConvertHzT ...

  8. 工具篇-Spring boot JPA多数据源

    写这篇博文是因为这个东西坑太多,首先说明下边实现的多数据源不是动态切换的,应该算是静态的. 坑一.pom文件 pom中spring boot以及mysql connector的版本一定要注意. < ...

  9. javaScript ES5常考面试题总结

    js的六种原始值 boolean null undefined number string symbol 坑1: 首先原始类型存储的都是值,是没有函数可以调用的,比如 undefined.toStri ...

随机推荐

  1. 【阿里聚安全·安全周刊】苹果证实 iOS 源代码泄露|英国黑客赢下官司

    本周的七个关键词:iOS 源代码泄露  丨 阿里软件供应链安全大赛  丨  个人数据安全  丨  Android P  丨  黑客赢下官司  丨  备忘录泄露美国安全局机密  丨  机器学习系统 -1 ...

  2. Jenkins获取运行job的用户名

    1. Jenkins获取运行job的用户名 需要安装user build vars plugin 插件,然后就可以取到$BUILD_USER_ID变量. user build vars plugin下 ...

  3. python爬虫学习之日志记录模块

    这次的代码就是一个日志记录模块,代码很容易懂,注释很详细,也不需要安装什么库.提供的功能是日志可以显示在屏幕上并且保存在日志文件中.调用的方式也很简单,测试代码里面有. 源代码: #encoding= ...

  4. Elasticsearch简介和安装对比

    各位小伙伴,又到了本期分享大数据技术的时间,本次给大伙带来的是Elasticsearch这个技术,闲话不多聊,我们开始进入正题. 一.什么是elasticsearch Elasticsearch是一个 ...

  5. Ubuntu16.04设置静态ip

    给Ubuntu系统配置一个静态IP ,方法如下 : 1. sudo vi /etc/network/interfaces  (本人更推荐使用 sudo gedit /etc/network/inter ...

  6. JDK 在 Linux 上安装的详细过程

    1.下载JDK Linux上一般会安装Open JDK,如果有系统预装了OpenJDK的话需要先卸载掉OpenJDK, 卸载过程可以参考这里:https://www.cnblogs.com/sxdcg ...

  7. HTML页面中插入CSS样式的三种方法

    1. 外部样式 当样式需要应用于很多页面时,外部样式表将是理想的选择.在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观.每个页面使用<link>标签链接到样式表. &l ...

  8. CSS3新增伪类--好用的:target

      问:如果让你实现下图,点击跳转后,让内容1增加一个背景颜色,你会怎么做呢? 可能很多小伙伴第一反应是用JS,给跳转绑定点击事件,然后用DOM获取到内容1,在给其添加css样式. 如果我跟你说用cs ...

  9. 如何获取java运行时动态生成的class文件?

    查看运行时生成的文件,以更清楚运行情况. 查看动态生成的类,一般有两个方法: 1. 使用据说是jdk自带包sa-jdi.jar里的工具. 其中,不想自己搞,当然就利用下,sa-jdi.jar 里自带的 ...

  10. Android中getDrawable和getColor过时的替代方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 Android SDK 升级到 23 之后,getDrawable和getColor方法提示过时. 解决方案 getResources(). ...