zoukankan      html  css  js  c++  java
  • Java源码剖析34讲学习笔记~1

    Sring的特点是什么, 他有哪些重要的方法?

    1. 多构造方法

    • String 为参数的构造方法
    • char[] 为参数的构造方法
    • StringBuffer 为参数的构造方法
    • StringBuilder 为参数的构造方法

    2. 方法

    • equals()

      • 重写了equals(), 先判断是否为String类型, 再逐位比较
    • compareTo()

      • 循环对比所有的字符, 当两个字符串中有任意一个字符不相同时, 则 return char1 - char2

      equals() 与 compareTo()

      - 不同点
        - equals()可以接受一个Object类型的参数, 而compareTo()只能接收一个String类型的参数
        - equals()返回值为Boolean, compareTo()返回值为int
      - 相同点
        - 都可以用于两个字符串的比较
        - 当equals()方法返回true时, 或者是compareTo()方法返回0时, 则表示两个字符串完全相同
      
    • 其他常用方法

      • indexOf(): 查询字符串首次出现的下标位置
      • lastIndexOf(): 查询字符串最后出现的下标位置
      • contains(): 查询字符串中是否包含另一个字符串
      • toLowerCase(): 把字符串全部转换成小写
      • toUpperCase(): 把字符串全部转换成大写
      • length(): 查询字符串的长度
      • trim(): 去掉字符串首位空格
      • replace(): 替换字符串中的某些字符
      • split(): 把字符串分割并返回字符串数组
      • join(): 把字符串数组转为字符串

    3. 问题延伸

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

      高效
      - final 修饰的类不可变, 能够缓存结果, 当你在传参时不需要考虑谁会修改它的值
      - 如果是可变类的话, 则可能需要重新拷贝出一个新的值类传参, 这样在性能上就会有一定的损失
      
      安全
      - String 类设计成不可变的另一个原因是安全, 防止因一些系统校验造成值发生变化导致结果不一致甚至是引起系统崩溃
      
    • ==equals 的区别是什么?

      == 对于基本类型来说比较的是两者的值, 对于引用类型来说比较的是两者的引用地址
      
    • StringStringBuilder, StringBuffer有什么区别?

      因为String类型是不可变的, 所以在字符串拼接的时候性能会很低, 因此需要使用另一个数据类型 StringBuffer 来进行append() 或 insert() 拼接
      
      StringBuffer 使用 synchronized 来保证线程安全
      
      JDK1.5 以后新增StringBuilder
      相比StringBuffer 它减少了 synchronized 修饰, 在性能上会优于 StringBuffer, 因此在非并发的操作上可以选用该类来进行拼接操作
      
    • Stringintern() 方法有什么含义?

      String s1 = new String("Java"); // 在堆上创建一个变量
      String s2 = s1.intern(); // 调用 intern() 方法, 讲此字符串保存在常量池中
      String s3 = "Java";
      System.out.println(s1 == s2); // false
      System.out.println(s2 == s3); // true
      
      
    • String 类型在 JVM (Java虚拟机) 中是如何存储的? 编译器对 String 做了哪些优化?

      // JDK1.7之后把永生代换成了元空间, 把字符串常量池从方法区移到了Java堆上
      
      // JVM对字符串的拼接进行了优化, 例:
      String s1 = "Ja" + "va";
      String s2 = "Java";
      System.out.println(s1 == s2); // true
      





      课程来源: 拉勾教育
      Java源码剖析34讲

  • 相关阅读:
    基于shell脚本比较数字加减乘除 要bc计算器
    基于shell脚本比较数字大小
    备份WordPress
    在CentOS 7 安装没有mysql
    SQL中判断字符串中包含字符的方法
    ASP.NET生成的HTML代码
    win7禁用休眠,献给c盘空间不足的朋友.
    SQLServer2005和2008的分页技术比较[转]
    浏览器兼容性系列--浅谈window.attachEvent
    在ASP.NET 的服务器端控件中有三种关于 ID 的属性
  • 原文地址:https://www.cnblogs.com/unrecognized/p/13221335.html
Copyright © 2011-2022 走看看