• java基础面试题 第四天


    一、java基础面试题 第四天

    1. String 为什么不可变?

    **不可变对象:**不可变对象在java中就是被final修饰的类就称为不可变对象,具体含义是,不可变对象一但被赋值以后,他的引用地址就不能被修改(它的属性的值可以被修改)

    不可变原因

    线程安全。同一个字符串实例可以被多个线程共享,因为字符串不可变,本身就是线程安全的。

    支持hash映射和缓存。因为String的hash值经常会使用到,比如作为 Map 的键,不可变的特性使得 hash 值也不会变,不需要重新计算。

    出于安全考虑。网络地址URL、文件路径path、密码通常情况下都是以String类型保存,假若String不是固定不变的,将会引起各种安全隐患。比如将密码用String的类型保存,那么它将一直留在内存中,直到垃圾收集器把它清除。假如String类不是固定不变的,那么这个密码可能会被改变,导致出现安全隐患。

    字符串常量池优化。String对象创建之后,会缓存到字符串常量池中,下次需要创建同样的对象时,可以直接返回缓存的引用

    2.为何JDK9要将String的底层实现由char[]改成byte[]?

    这样能节省内存

    在java的存放堆内存中,存放最多的就是字符串,大部分的字符串编码类型为拉丁字符,拉丁字符只占1个字节

    在Java中char类型占两个字节,这样就极大的浪费Java中堆内存,所以JDK9将String的底层实现由char[]改成byte[]

    3.String, StringBuffer 和 StringBuilder区别

    • String类是不可变字符串,他是不可以进行修改的,而

      StringBuffer和StringBuilder为可变字符串

    • StringBuffer实在1.5之前出的,StringBuilder实在1.5之后出的,StringBuffer 和StringBuilder 区别在于,StringBuffer方法都加同步锁,所以在单线程情况下,StringBuilder效率要比StringBuffer 效率要高

    4.什么是StringJoiner?

    StringJoiner是Java 8新增的一个API,他是基于StringBuilder实现,用于实现对字符串之间通过分隔符拼接的场景。

    StringJoiner sj = new StringJoiner("间隔符号");
    //创建一个StringJoiner对象,指定拼接时的间隔符号
    间隔符号为:“---”
    1---2---3
    
    
    StringJoiner sj = new StringJoiner("间隔符号","开始符号","结束符号");
    //创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号
    间隔符号为:“---”  开始符号:“[”  结束符号:“]”
    [1---2---3]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    5.String 类的常用方法有哪些?

    • indexOf():返回指定字符的索引。
    • charAt():返回指定索引处的字符。
    • replace():字符串替换。
    • trim():去除字符串两端空白。
    • split():分割字符串,返回一个分割后的字符串数组。
    • getBytes():返回字符串的 byte 类型数组。
    • length():返回字符串长度。
    • toLowerCase():将字符串转成小写字母。
    • toUpperCase():将字符串转成大写字符。
    • substring():截取字符串。
    • equals():字符串比较。

    6.new String(“dabin”)会创建几个对象?

    会创建两个对象

    "dabin"会在字符运行常量中生产一份

    在堆中生成一份字符串对象

    7.什么是字符串常量池?

    字符串常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。

  • 相关阅读:
    安防监控/智能分析EasyCVR视频汇聚平台海康/大华/宇视摄像头国标语音GB28181语音对讲配置流程
    conky配置
    JavaScript - 将特定格式的字符串保存为 CSV 文件
    四十一、Fluent初学者学习流程
    PTA 7-151 最大公约数
    Android11编译第二弹:USB连接MTP模式+USB调试+USB信任
    64. 最小路径和 java解决
    1-4metasploitable2介绍
    @RequiredArgsConstructor 引发的循环依赖问题
    基于多目标粒子群优化算法的冷热电联供型综合能源系统运行优化附Matlab代码
  • 原文地址:https://blog.csdn.net/Afu1021/article/details/132784074