String源码分析,解读面试题
来源:互联网 发布:.name域名是什么 编辑:程序博客网 时间:2024/06/07 22:15
1.String类不可被继承
#String类定义public final class String
- String被定义为final类,final(最终的意思)定义的类不可以被继承。
2.String是不可变对象
#String属性private final char value[];private int hash;
- final修饰的成员变量的引用(引用类似于指针,对应对象的内存地址)不可以被更改,引用对象不变。字符数组value存储String的元素,被final修饰,所以value的引用不可变。
- private修饰的成员变量不可以被外部类直接使用,所以不能在外部直接修改成员变量,value被private修饰,所以不能在外部通过引用直接修改成员变量。
- value仅提供了查询和比较的方法,没有提供提供公有的修改方法,所以不能在外部通过公有方法修改成员变量value。
3.下面的代码创建了几个String实例?
String s = new String("Hello world!");
通过下面的构造方法分析问题
#String构造方法public String(String orginal){ this.value = orginal.value; this.hash = orginal.hash;}
- “hello world” 是orginal的实例,orginal的value和hash引用赋给新的对象的value和hash引用。说明存在了两个String实例,引用对应同一个内存地址。
- 如果orginal变量已经存在,则只是创建了一个新的对象引用,将orginal的对象引用赋给了新创建的s。
4.对比数组,String获取长度的方法?
String s = new String("Hello world!");int sLen = s.length();int[] arr = {1,3,5,7};int arrLen = arr.length;
- 可以看到String s是通过length()方法获取的长度,而int数组arr的length属性获取的长度。
- 不过看下面的源码就知道因为String使用char数组value存储的元素,因为value私有,所以提供了公有的length方法,两者获取长度的方法本质是一样的。
#String源码private final char value[];public int length() { return value.length;}
阅读全文
0 0
- String源码分析,解读面试题
- String 相关--常见面试题分析
- Android面试题-OkHttp3源码分析
- Android面试题-Volley源码分析
- Android面试题-onSaveInstanceState源码内核分析
- Android面试题-onCreate源码分析
- Android面试题-IntentService源码分析
- Android面试题-LayoutInflater源码分析
- Android面试题-SharedPreferences源码分析
- HashMap源码分析及面试题解答
- 解读关键字volatile(C语言面试题分析之一)
- 解读关键字volatile (C语言面试题分析之一)
- String源码解读
- 一道解读百度面试题
- Java核对内库,String面试题分析
- String类面试题
- String面试题
- c string 面试题
- SQL语言的优点简单总结
- 洛谷1020拦截导弹(NOIP1999)
- DOS批处理
- Linux部署mysql
- 传说中的ACM大牛们
- String源码分析,解读面试题
- 不配置OpenCV环境,以动态链接的方式使用OpenCV
- 避免使用终结方法。
- 集合
- TensorFlow(二) 基本用法
- 系统与管理命令--User和Group类
- $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
- Azkaban学习笔记 --- Azkaban调研笔记
- virtualenv在windows10下面使用的注意事项