收集Java面试题知识点(Java基础部分三)
没有。因为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对象。因此使用在程序中使用字符串直接量可以充分利用这个特性来降低系统内存开销,提高程序性能。
答案是
就创建了一个
String s = "a" + "b" + "c" + "d" + "e";
赋值符号右边的"a"、"b"、"c"、"d"、"e"都是常量
对于常量,编译时就直接存储它们的字面值而不是它们的引用
在编译时就直接讲它们连接的结果提取出来变成了"abcde"
该语句在class文件中就相当于String s = "abcde"
然后当JVM执行到这一句的时候, 就在String pool里找
如果没有这个字符串,就会产生一个
未完待续。。。
Java基础部分详解(二)--- 面向对象 1. 此篇接Java基础部分详解(一) 2. 该篇主要阐述了Java中最重要的概念面向对象!! 3. 要学会画内存图,分析出代码的执行流程
Java基础部分学习记录及各细化知识点 他不仅可以解决初学者在学习Java的过程中配置开发环境的繁琐步骤,而且代码有中文报错非常利于初学者学习Java减少困惑;而且他还集成了更多语言的开发环境(例如:python、c、Go等一系列的语言)
相关文章
- Top 16 Java 应用类 - 这些功能再也不用自己写了
- Java IO部分面试题
- 近四百道高频Java技术面试题分享,直面大厂锁定金九银十
- 10万字208道Java经典面试题总结(附答案)
- Java面试题全集(上)
- 面试题-Java Web-网络通信
- Use Memcached for Java enterprise performance, Part 1: Architecture and setup
- 【Java】Java6 WebService的发布
- 什么是Java Marker Interface(标记接口)
- 【Java实习生】每日10道面试题打卡!
- (Java实习生)每日10道面试题打卡——Java基础知识篇2
- 「Java 数据结构」:手撕单链表的增删改查及大厂面试题。
- java生成指定范围的随机数
- Java平时需要注意的事项
- 2023年java基础面试题之MQ,生成消费者队列不得不说的那些事
- java将图片转成(BASE64)
- 华为OD机试 -火星文计算2(Java) | 机试题+算法思路+考点+代码解析 【2023】
- JAVA递归、非递归遍历二叉树(转)
- 剑指Offer面试题33(java版):把数组排成最小的数
- Java 消除文件目录结构
- LAN公布java web项目的方法的外侧
- java判断时间是否在时间段内 开始时间大于结束时间返回true