博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
收集Java面试题知识点(Java基础部分三)
阅读量:6439 次
发布时间:2019-06-23

本文共 1121 字,大约阅读时间需要 3 分钟。

1、String s = “Hello”;s = s + ” world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?

没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 “Hello”,然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为”Hello world!”,原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。
实际上,当我们需要一个字符串对象时,应该使用如下语法来创建String对象:
Sring s = “fkjava.org”;
也就是直接使用字符串直接量的语法。而不是:
String s = new String(“fkjava.org”);
对于第二种语法而言,每次都会调用构造器生成新的String对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。
基于这样一种想法,Java提供了字符串缓存池来管理字符串直接量,当程序多次用到同一个字符串直接量时,系统会让它们都引用字符串缓存池中的同一个String对象。因此使用在程序中使用字符串直接量可以充分利用这个特性来降低系统内存开销,提高程序性能。

2、下面这条语句一共创建了多少个对象:String s=”a”+”b”+”c”+”d”;

答案是

就创建了一个
String s = "a" + "b" + "c" + "d" + "e";
赋值符号右边的"a"、"b"、"c"、"d"、"e"都是常量
对于常量,编译时就直接存储它们的字面值而不是它们的引用
在编译时就直接讲它们连接的结果提取出来变成了"abcde"
该语句在class文件中就相当于String s = "abcde"
然后当JVM执行到这一句的时候, 就在String pool里找
如果没有这个字符串,就会产生一个

3、

4、

5、

6、

7、

8、

9、

10、

未完待续。。。

转载地址:http://bduwo.baihongyu.com/

你可能感兴趣的文章
除了叫好也应关注GDPR对数字产业的负效应 | 热评
查看>>
Vue.js 子组件的异步加载及其生命周期控制-------异步加载子组件,子组件的生命周期控制过程不一样...
查看>>
编写可维护的JavaScript
查看>>
高效的CSS代码(2)
查看>>
企业数据创新之旅-数据上云与备份容灾
查看>>
React prop类型检查与Dom
查看>>
jQuery Ajax
查看>>
JS-匀速运动-运动停止
查看>>
朱兰的质量三部曲——《可以量化的管理学》
查看>>
丰田生产方式和TOC工序切换时间的解决
查看>>
Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
查看>>
ODCC将发布首本中国数据中心选址“工具书”
查看>>
51行代码实现简单的PHP区块链
查看>>
Ubuntu 16.04重启Nautilus
查看>>
在新窗口打开WordPress文章中的所有链接
查看>>
Android开发实战(二十一):浅谈android:clipChildren属性
查看>>
区块链技术在版权保护中的应用实践
查看>>
Spring的JDBC示例
查看>>
专访李柯辰:有效的营销方法很重要 魅族为开发者构筑推广平台
查看>>
无处不在的人工神经网络:机器人拥有意识的关键
查看>>