zoukankan      html  css  js  c++  java
  • String是如何实现的?有哪些重要方法?

    String是如何实现的?

    以JDK8为准,String内部存储结构为char数组,JDK9 之后String的存储就从char数组转成了byte数组(这样做的好处是存储变的更紧凑,占用的内存更少,操作性能更高了.)

    常用方法:

    String的构造方法有哪些?

    •     char value[]
    •     String str
    •     StringBuilder bulder
    •     StringBuffer buffer

    equals():比较字符串相等

    •     使用instanceof判断是否为String
    •     循环逐个字符的比较
    •     类似的有:equalsIgnoreCase忽略大小写比较字符串相等

    compareTo():比较字符串大小

    •     循环对比所有字符
    •     当遇到两个字符不相同时,return char1-char2
    •     类似的有compareToIgnoreCase忽略大小写比较字符串大小
    •     equals和compareTo比较
    •         equals只能比较是否相等,compareTo可以比较大、小、相等
    •         equals参数可以是Object,compareTo只能是String
    •         equals返回值Boolean,compareTo返回值int

    indexOf():查询字符串首次出现的下标位置

    lastIndexOf():查询字符串最后出现的下标位置

    contains():查询字符串中是否包含另一个字符串

    toLowerCase():把字符串全部转换成小写

    toUpperCase():把字符串全部转换成大写

    length():查询字符串长度

    tirm():去掉字符串首位空格

    replace()替换字符串中某些字符

    split():字符串按符号分割返回数组

    join():把字符串数组转为字符串

    toCharArray():把字符串转为char数组

    substring(a,b):返回字符串下标[a,b)的字符

    扩展:

    为什么String类型要用final修饰?

    •     安全:使用过程中避免了被修改
    •     高效:常量池缓存字符串

    equals和‘==’的区别是什么?

    •     Object中的equals就是由‘==’实现的,String类重写了equals方法
    •     String中‘==’表示地址相同,equals表示字符相同
    1    public static void main(String[] args) {
    2         String a = new String("123");
    3         String b = new String("123");
    4         System.out.println(a == b);
    5         System.out.println(a.endsWith(b));
    6     }

    String 和 StringBuilder、StringBuffer 有什么区别?

    •     String是不可变类,StringBuffer和StringBuilder是可变类
    •     StringBuilder线程不安全,StringBuffer线程安全

    String 的intern()方法有什么含义?

    • 将堆中的变量加入到常量池

    String类型在JVM中如何存储的?编译器做过哪些优化?

    •  创建String对象的方式有两种
    •     String s1 = "Java";
    •     s1首先在常量池查找字符串“Java”,如果存在,引用指向常量,如果不存在,在常量池中创建字符串常量,再将引用指向常量
    •     String s2 = new String("Java");
    •     s2首先在常量池查找字符串“Java”,如果存在,复制一份引用到堆上,返回堆的引用。如果不存在,在常量池创建一个字符串常量,然后复制一份引用到堆上,然后返回堆的引用。

    编译器优化

    1 String s1 = "Ja" + "va";
    2 String s2 = "Java";
    3 System.out.println(s1 == s2);

    显示结果为true
    “Ja” + "va"直接被优化编译成了“Java”

  • 相关阅读:
    使用vue做项目时,刷新页面,原本应该隐藏的东西闪一下
    input type="file" 上传文件的一些使用
    vue强制重新渲染
    元素focus页面不滚动不定位的JS处理
    js使用案例
    js使用setInterval简单实现一个时钟
    js日期封装方法
    scss简单使用总结
    JavaScript的内置对象(Global对象)
    JavaScript—Date对象详情
  • 原文地址:https://www.cnblogs.com/lkylin/p/12692657.html
Copyright © 2011-2022 走看看